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 werden

Was Abfrage ausgeführt werden soll?

War es hilfreich?

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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top