2012-04-20 67 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 

在創建之前鉤。