在Rails 3中将现有的has_many关系更改为多态

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

您将不得不编写一些迁移

  1. 向Passenger表添加两列. - > rails g migration 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
Run Code Online (Sandbox Code Playgroud)



因此,此迁移将更新所有当前Car关系Passenger.也将使列车模型与之有关系Passenger.

  • 如何投掷add_index:passenger,[:transport_id,:transport_type]? (2认同)