2012-11-14 43 views
2

我想,如果信息發生改變mongoid update_attributes已更改?

您可以將此代碼簡單地傳遞到rails console在現有的軌道+ mongoid項目

class TestModel 
    include Mongoid::Document 
    include Mongoid::Timestamps 
    field :name, type: String 
end 

test = TestModel.new({:name => "name 1"}) 
test.save() 
=> true 

test 
=> created_at: 2012-11-14 13:48:26 UTC, updated_at: 2012-11-14 13:48:26 UTC 

test.changed? 
=> false 
test.name_changed? 
=> false 

test.update_attributes({:name => "name 2"}) 
=> true 

test.changed? 
=> false 
test.name_changed? 
=> false 

test 
=> created_at: 2012-11-14 13:48:26 UTC, updated_at: 2012-11-14 13:49:23 UTC 

我是不是做錯了什麼要和的update_attributes比檢查或這是一個錯誤?

回答

8

它的完美邏輯。

髒方法是用來檢查對象是否已經更改之前它被保存。根據定義,持久對象沒有未決的更改。

你應該這樣做:

test.assign_attributes(attributes) 
test.changed? #=> true 
test.save 

See method definition

+0

我試圖做到這一點ActiveRecord風格,使用改變和改變屬性,他們分別產生空的哈希和數組。然後我使用了assign_attributes,然後才報告了變化。所以對於Mongoid來說,這個部分是必需的。 – Donato