2012-04-20 71 views
0

我有一个带有date_received,created_at和received_state的发票模型。Rails 3 - 在创建记录时比较日期

在创建记录时,我想比较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

第一,如果你想它的创作之前更新的对象,您应该使用callback methodbefore_create如果你的情况下),在那里你可以使用self.received_state = ...代替update_attributes

对于日期比较,我不知道,也许是这样可能工作:

d = self.date_received.clone 
d.advance({:days => 2}) 
if self.created_at > d 
    ... 
+0

感谢您的输入。我试过了:'before_create do | invoice | d = date_received d.advance({:天=> 2}) 如果created_at> d invoice.received_state =红色 \t别的 \t invoice.received_state =绿色 \t \t结束端 '但得到一个“未定义方法'>'为零 – 2012-04-20 19:14:26

+0

@KatieM在'before_create'方法中,所有的属性都应该用'self'来访问,我已经更新了我的帖子 – Baldrick 2012-04-20 19:33:38

+0

再次感谢我将所有内容都改为“self”。 received_state at all(null),并且当我去查看它时,它说true为true的未定义方法:TrueClass。 d.advance({:天=> 2}) 如果self.created_at> d self.received_state ==红色 \t别的 \t self.received_state ==绿色 \t端 end' – 2012-04-20 19:46:16

0

我会写:

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

在创建之前钩。