簡體   English   中英

如何對彼此依賴的兩個屬性運行回調函數?

[英]How to run a callback function on two attributes that depend on each other?

在我的Rails應用程序中,我有一個具有datedue_date屬性的Invoice模型。

為了簡單起見,我不想用戶手動輸入due_date ,而只是輸入應該添加到date 的天數

這就是為什么我設置虛擬屬性days_allowed

class Invoice < ActiveRecord::Base

  belongs_to :user

  before_save :save_date

  attr_accessor :days_allowed

  def days_allowed # attribute reader (I need that too!)
    (due_date - date).to_i
  end

  def save_date
    self.due_date = date + days_allowed.days
  end

end

但是,當用戶在表單中選擇一個日期並輸入天數(例如10 ,我會得到錯誤的結果,因為save_date回調引用的是days_allowed方法,而不是同名的屬性。

關鍵問題似乎是我對彼此依賴的兩個不同屬性( datedays_allowed )使用了回調。

誰能告訴我如何解決這個難題?

謝謝你的幫助。

這種方法怎么樣(不需要before_save ):

class Invoice < ActiveRecord::Base

  belongs_to :user

  def days_allowed
    (due_date - date).to_i
  end

  def days_allowed=(days)
    self.due_date = date + days
  end
end

編輯如果datedays_allowed都存在, days_allowed應該使用批量分配,除非date始終排在最前面。

我認為您需要存儲所有三個字段,只是不提供任何用於編輯計算字段的表單屬性。

雖然您的用例似乎違反了“不要重復自己”,但我認為這是巧合重復的一個實例。 讓我解釋:

考慮您的下一個問題-您將開始在周末,假期等開始安排到期日。正是出於這個原因,我編寫了business_time gem:

https://github.com/bokmann/business_time

因此,在您添加10天的解決方案中,您現在可以添加10個工作日。 現在,確切的到期日期可能會在周末,假期創建的3天周末等之間波動。如果您不得不處理下雪天,例如美國東海岸的大多數地區最近都必須這樣做,則可以將tham添加為放假然后重新計算。 工作日仍為10個工作日,但截止日期已更改。 工作日數是要保存的關鍵數據,而不是要計算的數據。 需要保存到期數據,因為它是在上下文中計算出的一條信息,您希望將其保存以進行查詢,而不是每次都嘗試重新計算。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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