通过更改连接表

时间:2016-04-20 19:11:59

标签: ruby-on-rails

我有Patient has_manyPhenotype s的模型PatientsPhenotype

class Patient < ActiveRecord::Base
    has_many :patients_phenotypes
    has_many :phenotypes, through: :patients_phenotypes
end

class PatientsPhenotype < ActiveRecord::Base
    belongs_to :patient
    belongs_to :phenotype
    belongs_to :user
    has_many :properties # Information associated with each row in this join table
end

class Phenotype < ActiveRecord::Base
    has_many :patients_phenotypes
    has_many :patients, through: :patients_phenotypes
end

由于某些患者记录已过期,我希望将属于旧患者记录的表型重新关联到新的患者记录中。我不能简单地使用patient.phenotypes << phenotype将表型直接添加到患者体内,因为这些关联带有与连接表记录本身相关的其他信息,例如user_idproperties。 / p>

我尝试做的是将连接表实例的FK从旧患者设置为新患者,然后将此连接表实例添加到新患者的连接表集合中。

patient_phenotype.patient_id
# => (old_patient_id)
patient_phenotype.patient_id = new_patient.id
patient_phenotype.save
new_patient.patients_phenotypes << patient_phenotype

然而,这不起作用:

new_patient.phenotypes
# => []

这里出了什么问题?我最好只创建一个全新的PatientsPhenotype并重新分配属于原始PatientsPhenotype的信息吗?

1 个答案:

答案 0 :(得分:1)

在您运行new_patient.phenotypes执行new_patient.reload之前。