6

我在两个模型之间建立了一个现有的 has_many 关系——称它们为“汽车”和“乘客”——在我的生产环境中,有几千个“乘客”属于几百个“卡”。我正在添加另一个模型,称为“火车”,并且我想将汽车和乘客之间现有的 has_many 关系更改为将每位乘客与汽车或火车相关联的多态关系。

我的迁移应该是什么样的?我想在迁移时保留数据库中的现有关系,所以我宁愿做一些表重命名,而不是删除一列以将其替换为另一列。此外,我希望能够在不打开服务器控制台并手动编辑所有记录的情况下做到这一点,因此当我将更改推送到生产环境时,我可以一举迁移整个数据库。有什么建议么?

TL;DR:如何使用新模型将现有的 has_many 关系更改为多态关系?

4

1 回答 1

27

您将不得不编写一些迁移,例如

  1. 将两列添加到乘客表。-> rails g 迁移 change_column_in_passenger

  2. 在迁移文件中,在 up 方法中编写以下代码

代码:

def up
  rename_column :passengers, :car_id, :transport_id
  add_column :passengers, :transport_type, :string
  Passenger.reset_column_information
  Passenger.update_all(:transport_type => "Car")
end

def down
  rename_column :passengers, :transport_id, :car_id
  remove_column :passengers, :transport_type
end



因此,此迁移将更新 中的所有当前Car关系Passenger。也将允许训练模型与Passenger.

于 2013-04-28T13:58:18.803 回答