2010-11-19 5 views
0

J'ai une notification intégrée dans l'utilisateur. Dans Mongoid, comment pourrais-je obtenir une requête similaire. La requête ci-dessous est effectuée en utilisant Mongdb:Mongoid, aide avec les notifications

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

Fondamentalement, si j'ai l'utilisateur Foobar. Foobar a 3 types de notifications. Je souhaite activer l'une de ces notifications en définissant is_active sur true. En même temps, toutes les autres notifications is_active doivent être définies sur false

Quelle requête doit être exécutée?

Répondre

0

Le code équivalent serait quelque chose comme ceci:

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

Si vous voulez ensuite définir les autres inactifs:

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

Ou vous pouvez le faire en une seule ligne je suppose.

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

Dave est le plus souvent droit, mais le dernier MongoId a une méthode nommée update_all et vous pouvez l'utiliser pour définir d'autres notifications inactifs:

User.find('4ce694e672357e015a000014').notifications.excludes(:id => '4ce694e672357e015a000017').update_all(:active => false) 
Questions connexes