ruby on rails - ترحيل Rails لعمود التغيير




ruby-on-rails migration (4)

لدينا script/generate migration add_fieldname_to_tablename fieldname:datatype بناء جملة script/generate migration add_fieldname_to_tablename fieldname:datatype لإضافة أعمدة جديدة إلى نموذج.

على نفس الخط ، هل لدينا برنامج نصي / إنشاء لتغيير نوع البيانات لعمود؟ أو ينبغي أن أكتب SQL مباشرة في بلدي هجرة الفانيليا؟

أرغب في تغيير عمود من datetime .


كما وجدت في الإجابات السابقة ، هناك حاجة إلى ثلاث خطوات لتغيير نوع العمود:

الخطوة 1:

إنشاء ملف ترحيل جديد باستخدام هذا الرمز:

rails g migration sample_name_change_column_type

الخطوة 2:

انتقل إلى المجلد /db/migrate وعدّل ملف الترحيل الذي أجريته. هناك نوعان من الحلول المختلفة.

  1. def change
        change_column(:table_name, :column_name, :new_type)
    end
    

2.

    def up
        change_column :table_name, :column_name, :new_type
    end

    def down
        change_column :table_name, :column_name, :old_type
    end

الخطوه 3:

لا تنس أن تفعل هذا الأمر:

rake db:migrate

لقد اختبرت هذا الحل للقضبان 4 ويعمل بشكل جيد.


لا أدرك ما إذا كان بإمكانك إنشاء ترحيل من سطر الأوامر لتنفيذ كل هذا ، ولكن يمكنك إنشاء ترحيل جديد ، ثم تعديل الترحيل لتنفيذ هذا الإجراء.

إذا كان tablename هو اسم الجدول ، فسيكون fieldname هو اسم الحقل الخاص بك وتريد التغيير من وقت إلى تاريخ حتى الآن ، يمكنك كتابة الترحيل للقيام بذلك.

يمكنك إنشاء ترحيل جديد باستخدام:

rails g migration change_data_type_for_fieldname

ثم عدّل الترحيل لاستخدام change_table:

class ChangeDataTypeForFieldname < ActiveRecord::Migration
  def self.up
    change_table :tablename do |t|
      t.change :fieldname, :date
    end
  end
  def self.down
    change_table :tablename do |t|
      t.change :fieldname, :datetime
    end
  end
end

ثم قم بتشغيل الترحيل:

rake db:migrate

وأعتقد أن هذا يجب أن تعمل.

change_column :table_name, :column_name, :date

يمكنك أيضًا استخدام الحظر إذا كان لديك أعمدة متعددة للتغيير داخل جدول.

مثال:

change_table :table_name do |t|
  t.change :column_name, :column_type, {options}
end

راجع وثائق API على فصل الجدول لمزيد من التفاصيل.







migration