2010-07-09 4 views
0

Post s appartiennent à User s. User s ont et appartiennent à de nombreux rôles (c.-à-tables dont nous nous occupons ici sont posts, users, roles et roles_users)Filtrage des résultats basé sur une relation plusieurs-à-plusieurs

Comment puis-je sélectionner tous les messages écrits par un utilisateur qui a le rôle « Editeur » ?

Ie, je veux la base de données axée sur la version de

Post.all.select{|p| p.user.roles.map(&:name).include?("Editor")}} 

Répondre

2
Post.all(:joins => {:user => :roles}, :conditions => ["roles.name = ?", "editor"]) 
+0

Ceci est correct, bien que 'roles.name =>?' Shoul d être 'roles.name =?' –

+0

bon appel, mis à jour le poste. Merci! –

2

Vous pouvez essayer quelque chose comme ceci:

class Role < ActiveRecord::Base 
    has_and_belongs_to_many :users 
    has_many :posts, :through => :users 
end 

Ensuite, vous pouvez faire quelque chose comme ceci:

Role.find(editor_id).posts 
Questions connexes