[英]One-To-Many Model Update RoR
從治療到成本,我有一對多的關系。 這樣做的原因是因為出於發票和稅收目的,我們需要記錄治療價格的變化。 因此,這是通過說成本等於與該處理相關的最新成本輸入來實現的。
此功能需要對用戶完全透明,他們不應該對歷史成本一無所知,只需要知道當前的成本即可。
因此,當他們進行編輯並進行更新時,如果要更改處理成本,那么我也想更新成本表。 我的問題是模型以一種形式表示。
<% form_for([:admin, @treatment]) do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :name %><br />
<%= f.text_field :name %>
</p>
<p>
<%= f.label :description %><br />
<%= f.text_field :description %>
</p>
<p>
<%= f.label :duration %><br />
<%= f.text_field :duration %>
</p>
<p>
<%= f.submit 'Save' %>
</p>
<% end %>
因此,在模型中具有has_many:cost的處理方式,以這種形式,我想在其中包含最新費用的cost字段。 首先,我該怎么做? 此外,如果成本發生了變化,如何更新成本模型? 我假設它已在控制器中完成,但是如果我有一個text_field作為費用,我如何將其與@treatment模型關聯?
干杯
我有一個類似的問題,所以我有has_many
關聯,但是后來我有了一個has_one
關聯,它指向最新版本。
注意:我使用的是MSSQL,因此您的語法可能有所不同。
class Treatment < ActiveRecord::Base
has_many :costs
has_one :current_cost, :class_name => "Cost",
:conditions => "costs.id = (SELECT MAX(c.id)
FROM costs c
WHERE c.treatment_id = costs.treatment_id)"
end
我從這個開始:
class Treatment < ActiveRecord::Base
has_many :costs
def current_cost
self.costs.last(:order => "id")
end
end
但是當它足夠大后,我需要最小化數據庫驟降,這已成為瓶頸。
如果您有能力在費用模型中設置一個enabled
字段並使用驗證來確保每次處理僅啟用一個費用。 然后,我建議:
class Treatment < ActiveRecord::Base
has_many :costs
has_one :current_cost, :class_name => "Cost", :conditions => ["costs.enabled = ?", true]
end
我希望這有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.