ในแอพ Rails (3.2) ของฉันฉันมีตารางมากมายในฐานข้อมูลของฉัน แต่ฉันลืมที่จะเพิ่มข้อ จำกัด ที่ไม่เป็นโมฆะ ฉัน googled ไปรอบ ๆ แต่ฉันไม่พบวิธีเขียนการย้ายข้อมูลที่เพิ่มค่าว่างในคอลัมน์ที่มีอยู่
TIA
ในแอพ Rails (3.2) ของฉันฉันมีตารางมากมายในฐานข้อมูลของฉัน แต่ฉันลืมที่จะเพิ่มข้อ จำกัด ที่ไม่เป็นโมฆะ ฉัน googled ไปรอบ ๆ แต่ฉันไม่พบวิธีเขียนการย้ายข้อมูลที่เพิ่มค่าว่างในคอลัมน์ที่มีอยู่
TIA
คำตอบ:
สำหรับ Rails 4+ คำตอบของ nates (โดยใช้change_column_null ) จะดีกว่า
IrreversibleMigration
ที่อาจไม่ใช่สิ่งที่คุณต้องการ
คุณยังสามารถใช้change_column_null :
change_column_null :table_name, :column_name, false
1) FIRST: เพิ่มคอลัมน์ด้วยค่าเริ่มต้น
2) แล้ว: ลบค่าเริ่มต้น
add_column :orders, :items, :integer, null: false, default: 0
change_column :orders, :items, :integer, default: nil
หากคุณใช้มันกับสคริปต์ / สคีมาที่สร้างใหม่นี่คือวิธีที่เรากำหนดได้
class CreateUsers < ActiveRecord::Migration[5.2]
def change
create_table :users do |t|
t.string :name, null: false # Notice here, NOT NULL definition
t.string :email, null: false
t.string :password, null: false
t.integer :created_by
t.integer :updated_by
t.datetime :created_at
t.datetime :updated_at, default: -> { 'CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP' }
end
end
end
:limit
ข้อ จำกัด ) คุณจำเป็นต้องใช้แอตทริบิวต์เหล่านั้นซ้ำเมื่อใช้ไม่change_column
เช่นนั้นจะสูญหาย ด้วยเหตุนี้ฉันจึงชอบใช้change_column_null