ruby on rails - كيف تكتب الترحيل لإعادة تسمية نموذج ActiveRecord وجدوله في القضبان؟




ruby-on-rails migration (3)

إليك مثال على ذلك:

class RenameOldTableToNewTable < ActiveRecord::Migration
  def self.up
    rename_table :old_table_name, :new_table_name
  end

  def self.down
    rename_table :new_table_name, :old_table_name
  end
end

اضطررت للذهاب وإعادة تسمية ملف الإعلان نموذج يدويا.

تصحيح:

في القضبان 3.1 و 4 ، يعرف ActiveRecord::Migration::CommandRecorder كيفية عكس عمليات الترحيل rename_table ، بحيث يمكنك القيام بذلك:

class RenameOldTableToNewTable < ActiveRecord::Migration
  def change
    rename_table :old_table_name, :new_table_name
  end 
end

(لا يزال عليك المتابعة وإعادة تسمية الملفات يدويًا.)

أنا فظيع في تسمية وإدراك أن هناك مجموعة أفضل من الأسماء لنماذجي في تطبيق Rails.
هل هناك أي طريقة لاستخدام الترحيل لإعادة تسمية النموذج والجدول المقابل له؟


تحتاج أيضًا إلى استبدال الفهارس الخاصة بك:

class RenameOldTableToNewTable< ActiveRecord:Migration
  def self.up
    remove_index :old_table_name, :column_name
    rename_table :old_table_name, :new_table_name
    add_index :new_table_name, :column_name
  end 

  def self.down
    remove_index :new_table_name, :column_name
    rename_table :new_table_name, :old_table_name
    add_index :old_table_name, :column_name
  end
end

وإعادة تسمية الملفات الخاصة بك وغيرها ، يدويا كما تصف الإجابات الأخرى هنا.

انظر: http://api.rubyonrails.org/classes/ActiveRecord/Migration.html

تأكد من إمكانية العودة إلى الحالة السابقة والتمرير للأمام بعد كتابة هذا الترحيل. يمكن أن تصبح خادعة إذا حصلت على شيء خاطئ وتتعثر مع الهجرة التي تحاول أن تؤثر على شيء لم يعد موجودًا. أفضل سلة مهملات قاعدة البيانات بأكملها وابدأ مرة أخرى إذا لم تستطع العودة. لذا كن على دراية بأنك قد تحتاج إلى دعم شيء ما.

أيضًا: تحقق من schema_db لأية أسماء أعمدة ذات صلة في الجداول الأخرى المحددة بواسطة has_ ​​أو belong_to أو شيء ما. ربما ستحتاج إلى تعديلها أيضًا.

وأخيرًا ، سيكون إجراء ذلك بدون مجموعة اختبار الانحدار أمرًا صعبًا.


في Rails 4 كل ما كان علي فعله هو تغيير def

def change
  rename_table :old_table_name, :new_table_name
end

وقد تم الاعتناء بكافة الفهارس الخاصة بي. لم أكن في حاجة إلى تحديث الفهارس يدويًا عن طريق إزالة الفهارس القديمة وإضافة أخرى جديدة.

ويعمل أيضًا على استخدام التغيير للصعود أو الانخفاض فيما يتعلق بالمؤشرات أيضًا.





migration