2

update_attributes を実行して、情報が変更されたかどうかを確認したい

このコードをrails console既存の rails + 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

私は何か間違ったことをしていますか、それともバグですか?

4

1 に答える 1

8

その完全な論理。

ダーティメソッドは、保存する前にオブジェクトが変更されたかどうかを確認するために使用することを目的としています。定義上、永続化されたオブジェクトには保留中の変更はありません。

やったほうがいい:

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

メソッド定義を参照してください

于 2012-11-14T14:10:12.950 に答える