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