#ruby #mongoid #document
#ruby #mongoid #документ
Вопрос:
У меня есть модель
class Employee
include Mongoid::Document
field :first_name
field :last_name
field :address1
field :address2
field :salary
end
Теперь мне нужно обновить зарплату всех сотрудников до 10000, адрес1 которого — «Калгари»
Теперь я попробовал этот запрос
Employee.update_all "salary = 10000", "address1 = 'Calgary'"
Но этот запрос выдал мне ошибку как:
NoMethodError: undefined method `update_all' for Employee:Class
Спасибо
Комментарии:
1. Обновление: в настоящее время я использую mongoid v2.0.0 beta19
Ответ №1:
Вы должны попытаться обновить свой MongoID до последней версии. Mongoid 2.0 был выпущен некоторое время назад. Я предполагаю, что update_all, destroy_all и delete_all были введены в одном из rc.
После обновления должно сработать следующее
Employee.where(:address1 => 'Calgary').update_all(:salary => 10000)
Комментарии:
1. Проблема в том, что
update_all
это метод для списка ресурсов (массива результатов), а не для самой модели. Таким образом, вы не можете вызвать Foo.update_all, но вы можете вызвать Foo.some_selection.update_all.2. @berkes: вы можете получить «пустое» выделение, используя
Foo.scoped.update_all
Ответ №2:
В соответствии с этим http://groups.google.com/group/mongoid/browse_thread/thread/ac08564d5a38da13?pli=1
и быстрый Model.response_to?(:update_all) выдает true, предполагая, что Model.update_all в порядке
Ответ №3:
Более современный способ сделать это с помощью Moped
(базового драйвера):
Employee.collection.find(address1: 'Calgary').update_all(salary: 10000)
Кстати, странный запрос: P