簡體   English   中英

一對多模型更新RoR

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM