如何将Referral
表迁移到指向现有数据库的PatientProfile
id而不是User
id(即想要迁移所有现有行)?
class User
belongs_to :profile, polymorphic: true
has_many :referrals
class PatientProfile
has_one :user, as: :profile
class Referral
belongs_to :user
我可以通过简单地进行迁移并将user_id
列重命名为patient_profile_id
并更改模型中的引用来实现此目的,但这不会迁移到现有记录上。
答案 0 :(得分:0)
我不会简单地更改列名。我会做这样的事情
class AddPatientProfileToReferrals < ActiveRecord::Migration
def up
add_column :referrals, :patient_profile_id
add_index :referrals, :patient_profile_id
Referral.reset_column_information
Referral.includes(:user).find_each do |referral|
referral.update_attribute(:patient_profile_id, referral.user.profile_id)
end
remove_column :referrals, :user_id
end
end
您可能希望确保引荐具有用户,并且您可以简单地反转该过程以编写down方法。