2011-04-07 29 views
0

在名爲closed_date的訂單中有一列是DateTime字段。鐵軌髒污和日期變化

使用髒。試圖做if self.closed_date_changed?但它不工作。我需要做一些特殊的事情來跟蹤日期時間字段的變化嗎?


編輯 使用Rails 3.0.3,紅寶石1.9.2p136

代碼訂單控制器

def update 
@order = Order.find(params[:id]) 
    if @order.update_attributes(params[:order]) 
    @order.close_order 
    end 
end 
end 

在型號

include ActiveModel::Dirty 

def close_order 
    if self.closed? 
    if self.closed_date_changed? 
     self.items.each do |item| 
     item.update_attribute(:created_at, self.closed_date) 
     end 
    end 
    else 
    self.update_attributes(:closed_date => Time.now, :closed => true) 
    self.items.each do |item| 
     item.update_attribute(:created_at => Time.now) 
      item.schedule_any_tasks 
     end 
    end 
    end 
end 
+1

您使用的是哪種版本的導軌? – Kelly 2011-04-07 13:07:21

+0

當你看到這種行爲時,你可以放一些代碼示例嗎? – shingara 2011-04-07 13:08:44

回答

2

我想你的意思是這樣的:

def save_changes 
    if closed_date_changed? 
    # do something like save the modified data to a table 
    else 
    # do anything else 
    end 
end 

而且最重要的是,不要忘記調用此方法在before_save (更新)回調。

因爲更改只保留在實際記錄未保存。

希望它有幫助!

+0

試過並給了我錯誤 - 未定義的方法'改變了?'對於2011-04-04 00:00:00 UTC:時間 – pcasa 2011-04-07 14:17:33

+0

Kieber的意思是:如果closed_date_changed? 爲什麼這樣工作:update_attributes應該已經保存了模型,所以當你檢查原始示例代碼中的髒時,對象已經被保存並且實際上是乾淨的。 但是,在before_save過濾器中使用它會在保存和更改之前觸發所有內容。將工作 – RyanWilcox 2011-04-07 14:45:41

+0

是的,工作。有人可以理解爲什麼它像過濾器一樣工作,而不是在我的模型中? – pcasa 2011-04-07 15:19:10

0
def start_date_changed? 
    return true if self.start_date != self.start_date_was 
    return false 
end 

我已經使用其檢查值變化..

感謝名單

+0

嘗試過,但沒有奏效。 – pcasa 2011-04-07 14:10:15