Вопрос

У меня есть уведомление, встроенное пользователю. В мондоиде, как бы я достигли подобного запроса. Запрос ниже сделан с использованием 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 to true. В то же время все остальные уведомления IS_ Accive должны быть установлены на ложь

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

Это было полезно?

Решение

Эквивалентный код будет чем-то подобным:

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)) }

Другие советы

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

User.find('4ce694e672357e015a000014').notifications.excludes(:id => '4ce694e672357e015a000017').update_all(:active => false)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top