Jam*_*s M 6 ruby ruby-on-rails polymorphic-associations ruby-on-rails-3
我在两个模型之间存在一个现有的has_many关系 - 称为'汽车'和'乘客' - 在我的生产环境中有几千个"乘客"属于几百个"卡".我正在添加另一个模型,称之为"火车",我想将汽车和乘客之间现有的has_many关系改为多态,将每位乘客与汽车或火车相关联.
我的迁移应该是什么样的?我想在迁移时保留数据库中的现有关系,所以我宁愿做一些表重命名,而不是删除一列来替换另一列.此外,我希望能够在不打开服务器控制台并手动编辑所有记录的情况下完成此操作,因此当我将更改推送到生产环境时,我可以一举迁移整个数据库.有什么建议?
TL; DR:如何使用新模型将现有的has_many关系更改为多态?
Aks*_*noi 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
Run Code Online (Sandbox Code Playgroud)
因此,此迁移将更新所有当前Car关系Passenger.也将使列车模型与之有关系Passenger.