# How to find records, placing conditions on joined table?

**URL:** <https://www.ruby-forum.com/t/how-to-find-records-placing-conditions-on-joined-table/149489>\
**Category:** Rails\
**Created:** [September 25, 2008, 11:22am UTC](https://www.ruby-forum.com/t/how-to-find-records-placing-conditions-on-joined-table/149489 "2008-09-25T11:22:57Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![carminem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/90db22/32.png) [@carminem](https://www.ruby-forum.com/u/carminem)\
**Post date:** [September 25, 2008, 11:22am UTC](https://www.ruby-forum.com/t/how-to-find-records-placing-conditions-on-joined-table/149489/1 "2008-09-25T11:22:57Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![carminem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/90db22/32.png) [@carminem](https://www.ruby-forum.com/u/carminem)\
**Post date:** [September 25, 2008, 11:38am UTC](https://www.ruby-forum.com/t/how-to-find-records-placing-conditions-on-joined-table/149489/2 "2008-09-25T11:38:48Z")

</div>

On Sep 25, 5:22 pm, Carmine M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
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”])

---

<div class="post-metadata">

**Author:** ![carminem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/90db22/32.png) [@carminem](https://www.ruby-forum.com/u/carminem)\
**Post date:** [September 25, 2008, 11:41am UTC](https://www.ruby-forum.com/t/how-to-find-records-placing-conditions-on-joined-table/149489/3 "2008-09-25T11:41:06Z")

</div>

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
