2015-09-10 3 views
1

В docs они не упоминают тонкую разницу между Criteria#update_attributes и Criteria#update_all. Последнее не обновляет поле документа updated_at.Mongoid: update_attributes vs update_all

Это желаемое поведение? Если да, то не следует ли это отражать в документации?

ответ

2

Предполагается, что вы знакомы с ActiveRecord, и они предполагают, что вы предполагаете, что Mongoid ведет себя как ActiveRecord (кроме случаев, когда он не может). В ActiveRecord, update_all is explicitly documented не вызывать обратные вызовы:

update_all(updates)

[...] This method constructs a single SQL UPDATE statement and sends it straight to the database. It does not instantiate the involved models and it does not trigger Active Record callbacks or validations. [...]

Mongoid-х update_all аналогично передает один update операцию в MongoDB без вызова функции обратного вызова.

Документация Mongoid (как обычно в Ruby) немного тонка на важных деталях, поэтому вам придется привыкнуть к догадкам и чтению источника библиотек, которые вы используете. Включение тестов для проверки ваших догадок также является хорошей идеей, чтобы избежать неприятностей во время апгрейдов.

+0

> c.update_all (resources) throws: NoMethodError: undefined method 'update_all '- есть ли современный эквивалент? –

+0

@RomanGaufman [Мондоидские документы] (https://docs.mongodb.com/mongoid/6.1/api/Mongoid/Contextual/Mongo.html#update_all-instance_method) предполагают, что 'update_all' должен работать. Что конкретно означает 'c'? Какая версия Mongoid? –

Смежные вопросы