我有一個表Exercise,我正在將陣列從一列傳輸dynamic到一個新的連接表ExerciseDynamicMuscle。這樣:id,陣列中的每個都成為它自己的物件/記錄。我已經對其進行了測驗并且它可以作業,或者至少在檢查它已正確傳輸的記錄時,我只是好奇是否還有其他我應該添加或注意的東西?
正在轉移到的表的遷移資訊:
create_table :exercise_dynamic_muscles do |t|
t.belongs_to :exercise
t.belongs_to :muscle
t.timestamps
end
為進行傳輸而創建的遷移:
Exercise.find_each do |e|
e.dynamic.each do |mu|
ExerciseDynamicMuscle.create(
muscle_id: mu,
exercise_id: e.id
)
end
end
運動動態肌肉模式:
create_table "exercise_dynamic_muscles", force: :cascade do |t|
t.bigint "exercise_id"
t.bigint "muscle_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["exercise_id"], name: "index_exercise_dynamic_muscles_on_exercise_id"
t.index ["muscle_id"], name: "index_exercise_dynamic_muscles_on_muscle_id"
end
傳輸資料后,我計劃通過另一個遷移洗掉列:
remove_column :exercises, :dynamic
所以會有兩個單獨的遷移:
- 一個傳輸資料
- 一個洗掉列
uj5u.com熱心網友回復:
通常遷移是可逆的。為此,您需要類似的東西
def up
create_table :exercise_dynamic_muscles do |t|
t.belongs_to :exercise
t.belongs_to :muscle
t.timestamps
end
Exercise.find_each do |e|
e.dynamic.each do |m_id|
ExerciseDynamicMuscle.create!(
muscle_id: m_id,
exercise_id: e.id
)
end
end
remove_column :exercises, :dynamic
end
def down
change_table :exercises do |t|
t.text :dynamic, array: true, default: []
end
ExerciseDynamicMuscle.find_each do |edm|
exercise = edm.exercise
exercise.dynamic << edm.muscle_id
exercise.save!
end
drop_table :exercise_dynamic_muscles
end
首先創建新表,然后將資料從陣列列遷移到該表,最后洗掉陣列列
回滾遷移一切都一樣,但只是順序相反
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/507446.html
下一篇:使用時間助手進行測驗
