0

date_received、created_at、および received_state を持つ請求書モデルがあります。

レコードの作成時に、date_received と created_at を比較して、received_state を更新したいと考えています。具体的には、created_at が date_received から 2 日以上経過している場合、received_state は赤に等しい必要があります。したがって、次のようなものです。

if created_at > date_received + 2 days
  @invoice.update_attribute(:received_state, red)
else
  @invoice.update_attribute(:received_state, green)
end

日付のヘルパー メソッドがあることは知っていますが、この例でそれらを使用する方法がわかりません。ご協力ありがとうございます。

更新:私は次のことを試しました。エラーはありませんが、レコードはどちらの条件でも更新されません:

if (:date_received - :created_at).to_i > 2
  @invoice.update_attribute(:received_state, red)
else
  @invoice.update_attribute(:received_state, green)
end 

更新 2: 次のことを試しましたが、緑の条件が満たされていても、レコードは赤で更新されます。

if :date_received.to_i - :created_at.to_i > 2
  @invoice.update_attribute(:received_state, red)
else
  @invoice.update_attribute(:received_state, green)
end 
4

2 に答える 2

0

まず、オブジェクトを作成する前に更新する場合は、コールバックメソッドを使用する必要があります(before_createケースの場合)。このメソッドでは、self.received_state = ...代わりにを使用できます。update_attributes

日付の比較については、よくわかりません。おそらく、そのようなものが機能する可能性があります。

d = self.date_received.clone
d.advance({:days => 2})
if self.created_at > d
   ...
于 2012-04-20T18:38:57.560 に答える
0

私は書いたでしょう:

if Date.current - 2.days > date_received
  self.received_state = red
else
  self.received_state = green
end

フックを作成する前に。

于 2012-04-20T20:05:19.380 に答える