How to find records, placing conditions on joined table?

Hi to everyone,

I have my User model which has_many roles.
Now, I’ve the need to find all users with certain roles.

At first I thought of something like

User.find(:all, :joins => :roles).select { |u| u.has_role?(:admin) }

But this seems unnatural to me, because it forces to load all the Users
and then applying a filter
on the collections.

Is there a way to obtain the same result in a better way?

Perhaps something like:

User.find(:all, :joins => :roles, :conditions => [ “‘admin’ in roles” ])

Thanks in advance for your help.

Regards,
Carmine

On Sep 25, 5:22 pm, Carmine M. [email protected]
wrote:

and then applying a filter
Regards,
Carmine

Posted viahttp://www.ruby-forum.com/.

Assuming the reference field of Role is name:

User.find(:all, :joins => :roles, :conditions => [“roles.name IN (?)”,
“admin”])

You can also do:

User.find(:all, :joins => :roles, :conditions => [“roles.name IN (?)”,
[“admin”, “editor”])

Hi there Erol!

Thanks so much for your help!

User.find(:all, :joins => :roles, :conditions => [“roles.name IN (?)”,
[“admin”, “editor”])

That’s waaaay better!
Thank you