แม้ว่าคำตอบที่ได้รับการยอมรับนั้นยอดเยี่ยม แต่ฉันต้องการเพิ่มคำตอบที่นี่ซึ่งหวังว่าจะจัดการกับคำถามของโปสเตอร์ต้นฉบับตอนที่ 2 ได้ดีขึ้นสำหรับผู้ที่ไม่ใช่ผู้เชี่ยวชาญเช่นฉัน
- ฉันจะสร้างการย้ายข้อมูลเพื่อแทนที่ประเภทของคอลัมน์นั้นได้อย่างไร
สร้างการโยกย้ายแบบนั่งร้าน
คุณสามารถสร้างการย้ายข้อมูลเพื่อระงับการเปลี่ยนแปลงของคุณโดยพิมพ์ในคอนโซลของคุณ (เพียงแค่แทนที่table
สำหรับชื่อตารางของคุณและcolumn
สำหรับคุณชื่อคอลัมน์)
rails generate migration change_table_column
สิ่งนี้จะสร้างการย้ายโครงกระดูกภายในคุณ Rails application / db / migrate / folder การย้ายข้อมูลนี้เป็นตัวยึดสำหรับรหัสการย้ายข้อมูลของคุณ
ตัวอย่างเช่นฉันต้องการสร้างการโยกย้ายเพื่อเปลี่ยนประเภทของคอลัมน์จากstring
เป็นtext
ในตารางที่เรียกว่า TodoItems:
class ChangeTodoItemsDescription < ActiveRecord::Migration
def change
change_column :todo_items, :description, :text
end
end
เรียกใช้การย้ายข้อมูลของคุณ
เมื่อคุณป้อนรหัสเพื่อเปลี่ยนคอลัมน์แล้วให้เรียกใช้:
rake db:migrate
เพื่อใช้การย้ายข้อมูลของคุณ หากคุณทำข้อผิดพลาดคุณสามารถยกเลิกการเปลี่ยนแปลงได้ตลอดเวลาโดย:
rake db:rollack
วิธีการขึ้นและลง
การอ้างอิงคำตอบUp
และDown
วิธีการที่ยอมรับแทนที่จะเป็นChange
วิธีการที่ใหม่กว่า เนื่องจากราง3.2 วิธีการขึ้นและลงแบบเก่านำเสนอข้อดีบางประการเหนือวิธีการเปลี่ยนแปลงที่ใหม่กว่า 'ขึ้นและลง' ActiveRecord::IrreversibleMigration exception
หลีกเลี่ยง ตั้งแต่การเปิดตัวRails 4คุณสามารถใช้reversible
เพื่อหลีกเลี่ยงข้อผิดพลาดนี้:
class ChangeProductsPrice < ActiveRecord::Migration
def change
reversible do |dir|
change_table :products do |t|
dir.up { t.change :price, :string }
dir.down { t.change :price, :integer }
end
end
end
end
สนุกกับ Rails :)