How to do IN(?) query?

I’m trying to do an IN query, where I have an array of user objects
imaginatively named ‘users’:

:conditions=>[“user_id IN (?)”, users.collect{|u| }.join(’,’)]

this ends up with:

… IN(‘1,2,3’) …

Obviously I want this to be:

… IN(1,2,3) …
or even
… IN(‘1’, ‘2’, ‘3’) …

How do I get ActiveRecord to stop quoting the whole thing?

I thought passing in the object array itself did the trick - the
documentation says as such, giving the following example:

Person.find(:all, :conditions => [ “category IN (?)”, categories])

When I try this, the array is printed and my query looks something like:

IN (’— !ruby/object:User \nattributes: …

Any ideas?

Thanks in advance - I’ll carry on Googling and see what I can turn up!

If categories is an array of numbers (think user id’s) your second idea
will work:

users = [ 1,2,3,4,5]
Person.find :all, :conditions=>[‘id IN (?)’, users]

but since you have actual user objects you could simplify and say:

users = [ user1, user2, user3 ]
Person.find_all_by_id{ |u| }

Hope this helps,


Superb - thanks!

Just had to take out the .join(‘,’) and all works a charm.

Thanks again.


You can also use a handy rails shortcut:

categories.collect { |c| }

Can be written as:




On 4/5/06, Richard L. [email protected] wrote:

Rails mailing list
[email protected]

Tobi - modern e-commerce software - Open source weblog engine - Technical weblog