我有两种不同的模型:患者和样本。患者可以有几个样本,一个样本属于患者。
这是简化的两个模型(仅包含此问题所需的信息......):
class Sample < ActiveRecord::Base
attr_accessible :dateOfSample, :patient_attributes, :infantBreastFeedingAtThisTime, :typeBreastFeedingAtThisTime, :idadeDesmameAtThisTime
belongs_to :patient
accepts_nested_attributes_for :patient
end
患者模特:
class Patient < ActiveRecord::Base
attr_accessible :date_of_birth, :infant_name, :infantBreastFeeding, :typeBreastFeeding,:idadeDesmame
has_many :samples
end
我想要做的是,每次创建或更新样本时,如果“dateOfSample”是最后一个样本,我想用最后一个特定样本更新患者属性(:infantBreastFeeding,:typeBreastFeeding,:idadeDesmame) attributes(:infantBreastFeedingAtThisTime,:typeBreastFeedingAtThisTime,:idadeDesmameAtThisTime)
如何在示例模型中执行此操作?使用after_save?我试过但是无法通过患者的属性,所以它没有认出患者......这应该是我正在做的一个简单的错误,仍然是铁路菜鸟:)
谢谢!
更新:
我有一个表格来插入/更新样本。在那个形式里面,我对患者领域(姓名和出生日期)有一个部分。很抱歉没有发布表单,但它太大了......
答案 0 :(得分:1)
你可以通过几种不同的方式解决这个问题。首先,您可以尝试after_save
方法,如下所示:
class Sample < ActiveRecord::Base
after_save :update_patient
def update_patient
if self.class.where(patient: self.patient).maximum(:dateOfSample) == self.dateOfSample
self.patient.update_attributes(infantBreastFeeding: infantBreastFeedingAtThisTime,
typeBreastFeeding: typeBreastFeedingAtThisTime,
idadeDesmame: idadeDesmameAtThisTime)
end
end
end
其次,您可以在创建或更新中设置控制器中的属性。
class SamplesController < ApplicationController
# call this in both your create and update methods before you save
def assign_sample_attributes_to_product
if Sample.where(patient: @sample.patient).maximum(:dateOfSample) < @sample.dateOfSample)
@sample.assign_attributes(infantBreastFeeding: @sample.infantBreastFeedingAtThisTime,
typeBreastFeeding: @sample.typeBreastFeedingAtThisTime,
idadeDesmame: @sample.idadeDesmameAtThisTime)
end
end
end
希望这可以帮助你!