هجرات القضبان: التراجع عن الإعداد الافتراضي للعمود
-
23-08-2019 - |
سؤال
لدي المشكلة، أن لدي هجرة في القضبان التي تقوم بإعداد إعداد افتراضي لعمود، مثل هذا المثال:
def self.up
add_column :column_name, :bought_at, :datetime, :default => Time.now
end
افترض، أحب أن أسقط تلك الإعدادات الافتراضية في ترحيل لاحق، كيف أفعل ذلك باستخدام هجرات القضبان؟
الحل الحالي الخاص بي هو تنفيذ أمر SQL مخصص في ترحيل القضبان، مثل هذا:
def self.up
execute 'alter table column_name alter bought_at drop default'
end
لكنني لا أحب هذا النهج، لأنني أعتمد الآن على كيفية تفسير قاعدة البيانات الأساسية لهذا الأمر. في حالة تغيير قاعدة البيانات، قد لا يعمل هذا الاستعلام بعد الآن وكسر الهجرة. لذلك، هل هناك طريقة للتعبير عن التراجع عن إعداد افتراضي لعمود في القضبان؟
المحلول
القضبان 5+.
def change
change_column_default( :table_name, :column_name, from: nil, to: false )
end
القضبان 3 والقضبان 4
def up
change_column_default( :table_name, :column_name, nil )
end
def down
change_column_default( :table_name, :column_name, false )
end
نصائح أخرى
اصوات كأنك تفعل الشيء الصحيح مع "تنفيذ" الخاص بك، حيث أن المستندات تشير إلى:
change_column_default(table_name, column_name, default)
يحدد قيمة افتراضية جديدة للعمود. إذا كنت ترغب في تعيين القيمة الافتراضية إلى NULL، فأنت خارج الحظ. تحتاج إلى DatabSestatatements # تنفيذ عبارة SQL المناسبة بنفسك.أمثلة
change_column_default(:suppliers, :qualification, 'new') change_column_default(:accounts, :authorized, 1)
المقتطف التالي الذي استخدمه لجعل NULL
الأعمدة NOT NULL
, ، ولكن تخطي DEFAULT
على مستوى المخطط:
def self.up
change_column :table, :column, :string, :null => false, :default => ""
change_column_default(:table, :column, nil)
end
القضبان 4.
change_column :courses, :name, :string, limit: 100, null: false