我正在使用rails 3.2。我有一個「樣本」的嵌套表單。 「患者」可以有幾個「樣品」,但「樣品」只能有一個「患者」。檢查是否存在記錄,如果是更新,否則創建新的 - 嵌套窗體 - 導軌
患者主鍵是「ID」,但也有4個外鍵:nid,province_id,district_id和facility_id。
這裏的模型(我想只顯示相關代碼):
Patient.rb
class Patient < ActiveRecord::Base
attr_accessible :date_of_birth, :infant_name, :nid, :province_id, :district_id, :facility_id, :gender_id, :gender_atributes
belongs_to :gender
belongs_to :province
belongs_to :district
belongs_to :facility
has_many :samples
accepts_nested_attributes_for :gender
validates :province_id, presence: true
validates :district_id, presence: true
validates :facility_id, presence: true
validates :nid, presence: true
#To validate uniqueness of patient, that is, one with unique nid, province, district and facility
validates_uniqueness_of :nid, :scope => [:province_id, :district_id, :facility_id]
end
Sample.rb
class Sample < ActiveRecord::Base
attr_accessible :dateOfSample, :nrOrdem, :patient_id,:facility_id, :province_id, :district_id
belongs_to :facility
belongs_to :patient
belongs_to :province
belongs_to :district
accepts_nested_attributes_for :patient
end
我想是爲了避免損壞了pacient上的數據,也就是讓不同的患者具有相同的(nid,province_id,district_id和facility_id)。
現在樣本的嵌套形式讓我創建一個新的患者,如果我嘗試創建一個新的患者(nid,province_id,district_id和facility_id),我得到一個錯誤,說「nid已經被採用」。但是,由於患者可能有不同的樣本,我想(在嘗試創建記錄時)檢查患者是否已經存在,如果它確實會將「patient_id」添加到「樣本」記錄中,否則創建一個新的一個。
如果還顯示一條消息,說明病人已經存在並填寫表單上的相應數據,但現在如果它將patient_id添加到樣本記錄中,我會很高興,而忽略其餘部分病人字段嵌套形式。
我試圖實現這樣的東西 rails: create Parent, if doesn't exist, whilte creating child record但它沒有工作。
我該如何解決這個問題?
編輯
下面的代碼是如何結束@詹姆斯·梅森的幫助後。 在Sample.rb
def patient_attributes=(attrs)
self.patient = Patient.where({:nid => attrs[:nid], province_id: province_id, district_id: district_id, facility_id: facility_id}).first_or_initialize(attrs)
end
我會把這個「創建「」樣本「控制器的行爲? – lbramos
更新了關於在哪裏放置代碼 –
的例子,我想我們快到了。我把代碼放在示例模型中,但我必須這樣做:'self.patient = Patient.where({:nid => attrs [:nid],province_id:province_id,district_id:district_id,facility_id:facility_id})。 first_or_initialize'因爲它只搜索這些字段。如果患者已經存在,它可以讓我在樣本記錄中添加「patient_id」,但如果患者不存在,它不會通過患者的其餘部分...如果它不存在,我怎麼能通過其餘的的參數在attrs?謝謝 – lbramos