هجرات القضبان: التراجع عن الإعداد الافتراضي للعمود

StackOverflow https://stackoverflow.com/questions/887246

  •  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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top