Mongoid, Hilfe bei Benachrichtigungen
-
26-09-2019 - |
Frage
Ich habe Benachrichtigung in nutzereingebettet bekam. In Mongoid, wie würde ich eine ähnliche Abfrage erreichen. Die Abfrage unten erfolgt mit Mongdb:
MONGODB site_name_development['users'].update(
{"_id"=>BSON::ObjectId('4ce694e672357e015a000014'),
"notifications._id"=>BSON::ObjectId('4ce694e672357e015a000017')},
{"$set"=>{"notifications.0.is_active"=>true}})
Im Grunde genommen, wenn ich Benutzer Foobar. Foobar hat drei Arten von Benachrichtigungen. Ich möchte auf eine dieser Meldungen machen, indem is_active auf true setzen. Zur gleichen Zeit alle anderen Mitteilung des is_active sollte auf false
gesetzt werdenWas Abfrage ausgeführt werden soll?
Lösung
Der entsprechende Code in etwa so wäre:
notification = User.find('4ce694e672357e015a000014').notifications.find('4ce694e672357e015a000017').update_attributes!(:active => true)
Wenn Sie dann wollen die andere inaktiv setzen:
User.find('4ce694e672357e015a000014').notifications.excludes(:id => '4ce694e672357e015a000017').each { |notification| notification.update_attributes!(:active => false) }
Oder Sie könnten es tun, in einer Zeile, denke ich.
User.find('4ce694e672357e015a000014').notifications.each { |notification| notification.update_attributes!(:active => (notification.id == '4ce694e672357e015a000017' ? true : false)) }
Andere Tipps
Dave ist meistens richtig, aber spätestens mongoid hat eine Methode namens update_all und Sie können das verwenden für die Einstellung andere Benachrichtigungen zu inaktiv:
User.find('4ce694e672357e015a000014').notifications.excludes(:id => '4ce694e672357e015a000017').update_all(:active => false)