Mongoid, помогите с уведомлениями - PullRequest
0 голосов
/ 19 ноября 2010

У меня есть уведомление, встроенное в пользователя.В Mongoid, как бы я получить аналогичный запрос.Запрос ниже выполняется с использованием Mongdb:

MONGODB site_name_development['users'].update(
  {"_id"=>BSON::ObjectId('4ce694e672357e015a000014'), 
  "notifications._id"=>BSON::ObjectId('4ce694e672357e015a000017')}, 
{"$set"=>{"notifications.0.is_active"=>true}})

В основном, если у меня есть пользователь Foobar.Foobar имеет 3 типа уведомлений.Я хочу включить одно из этих уведомлений, установив для is_active значение true.В то же время все остальные уведомления is_active должны быть установлены в false

Какой запрос должен быть выполнен?

Ответы [ 2 ]

0 голосов
/ 29 марта 2011

Дейв в основном прав, но в последней версии mongoid есть метод с именем update_all, который можно использовать для установки других уведомлений в неактивное состояние:

User.find('4ce694e672357e015a000014').notifications.excludes(:id => '4ce694e672357e015a000017').update_all(:active => false)
0 голосов
/ 22 ноября 2010

Эквивалентный код будет выглядеть примерно так:

notification = User.find('4ce694e672357e015a000014').notifications.find('4ce694e672357e015a000017').update_attributes!(:active => true)

Если вы хотите установить другие неактивные:

User.find('4ce694e672357e015a000014').notifications.excludes(:id => '4ce694e672357e015a000017').each { |notification| notification.update_attributes!(:active => false) }

Или вы можете сделать это в одной строкеугадай.

User.find('4ce694e672357e015a000014').notifications.each { |notification| notification.update_attributes!(:active => (notification.id == '4ce694e672357e015a000017' ? true : false)) }
...