2014-07-16 57 views
0

我進入了我的申請,rails console和執行以下語句:update_attribute更新一次

order = Order.find(2) 
order.update_attribute(:start_at, Time.new) 

的ActiveRecord由下面的SQL語句:

UPDATE orders 
SET 
    start_at = '2000-01-01 14:23:00', 
    updated_at = '2014-07-16 10:30:59' 
WHERE 
    orders.id = 2 

現在我再次執行相同的update_attribute方法具有相同的參數和再得到

UPDATE orders SET updated_at = '2014-07-16 10:33:52' WHERE orders.id = 2 
UPDATE orders SET updated_at = '2014-07-16 10:34:11' WHERE orders.id = 2 
UPDATE orders SET updated_at = '2014-07-16 10:37:19' WHERE orders.id = 2 

updated_at字段外沒有更新內容!

+1

你的'Order'模型有回調嗎? – xlembouras

+0

不會在我的控制檯中發生......雖然我使用Rails 4,但可能是一個錯誤。 –

+0

你沒有提出問題?僅供參考:對於這種更新,您可能希望使用'touch'代替:'order.touch(:start_at)'。 – pdobb

回答

0

一些解釋你使用(均來自DOC)什麼樣的方法:

update_attribute(name, value) <= v2.3.8 

更新單個屬性並保存記錄,而不通過正常驗證程序去。

update_attribute(name, value) >= 4.0.0 

更新單個屬性並保存記錄。這對於現有記錄上的布爾標誌特別有用。還請注意,

  • 驗證被跳過。

  • 回調被調用。

  • 如果該列可用,updated_at/updated_on列將被更新。

  • 更新此對象中髒的所有屬性。

和你試試:

更新只updated_at被更新,因爲列可用。

order.update_attribute(:start_at, Time.new) 

髒屬性:

order.start_at = Time.new 
再次

order.update_attribute(:start_at, Time.new) 

現在列start_at更新。