1

J'utilise Rails 3 avec MongoMapper. Je veux ajouter quelques enregistrements au résultat de l'association has many.Override mongomapper has_many association

Par exemple, user has_many posts

class User 
    include MongoMapper::Document 

    many :posts 
end 

Par défaut, il affichera uniquement les messages qui appartiennent à l'utilisateur, mais s'il/elle précise option spéciale dans la requête (ou dans le menu des paramètres de l'utilisateur, par exemple show-commented=true), alors j'ai aussi besoin d'ajouter des posts où l'utilisateur a laissé des commentaires. Donc, je pense passer outre posts méthode

def posts 
    super + (show_commented_posts ? commented_posts : []) 
end 

Mais bien sûr, il ne fonctionne pas. Comment puis-je remplacer correctement cette méthode en utilisant mongo_mapper? Ou y a-t-il une meilleure approche pour ce problème?

Répondre

2

Redéfinition des méthodes sur mongomapper est une très mauvaise idée, vous devriez essayer de ne pas le faire car il crée beaucoup de problèmes qui sont difficiles à remonter (j'ai été brûlé avant par ce sujet).

, vous devriez plutôt envisager d'utiliser une portée telle que

class Post 
    scope :related_to_user, lambda {|user| where('$or' => [ {user_id: user.id}, {'comments.user_id' => user.id}]) } 
end 

Ensuite, vous pouvez appeler

Post.related_to_user(current_user) 
Questions connexes