我有一个发票型号,包含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
答案 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
在创建之前的钩子上。