mongoid 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

Я что-то не так делаю или это баг?


person puchu    schedule 14.11.2012    source источник


Ответы (1)


Это совершенно логично.

Грязные методы предназначены для проверки того, изменился ли объект до его сохранения. По определению у сохраняемого объекта нет ожидающих изменений.

Ты должен сделать:

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

См. определение метода.

person apneadiving    schedule 14.11.2012
comment
Я пытался сделать это в стиле ActiveRecord, используя атрибуты измененных и измененных, и они производили соответственно пустые хэши и массивы. Затем я использовал assign_attributes и только после этого сообщил об изменениях. Так что для монгоида эта часть обязательна. - person Donato; 06.06.2016