Rails 3 - 在记录创建时比较日期

时间:2012-04-20 17:46:32

标签: ruby-on-rails-3

我有一个发票型号,包含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 

2 个答案:

答案 0 :(得分:0)

首先,如果您想在创建对象之前对其进行更新,则应使用callback method(如果您的情况为before_create),您可以使用self.received_state = ...代替{{1 }}

对于日期比较,我不确定,也许这样的事情可能有效:

update_attributes

答案 1 :(得分:0)

我会写:

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

在创建之前的钩子上。