我的两个模型之间存在has_many关系 - 称之为“汽车”和“乘客” - 在我的生产环境中有几千个“乘客”属于几百个“卡”。我正在添加另一个模型,称之为“火车”,我想将汽车和乘客之间现有的has_many关系改为多态,将每位乘客与汽车或火车相关联。
我的迁移应该是什么样的?我想在迁移时保留数据库中的现有关系,所以我宁愿做一些表重命名,而不是删除一列来替换另一列。此外,我希望能够在不打开服务器控制台并手动编辑所有记录的情况下完成此操作,因此当我将更改推送到生产环境时,我可以一举迁移整个数据库。有什么建议吗?
TL; DR:如何将现有的has_many关系更改为具有新模型的多态关系?
答案 0 :(得分:25)
您必须编写一些迁移,例如
向Passenger表添加两列。 - > rails g migration change_column_in_passenger
在迁移文件中,在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
建立关系。