Forum: Ruby on Rails HABTM: AND on associated table records

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Serafino P. (Guest)
on 2009-05-11 10:52
In my application i have the following models:

Item - has_and_belongs_to_many :orders
Order - has_and_belongs_to_many :items

This is a basic setup for a small shopping app, I can successfully
add/remove/edit a list of items to one or more orders, but now from the
administration i need to be able to perform a search like: "show orders
having (at least) item x and item y and item z (or more)"

Basically, i need to use AND conditions for items belonging to orders,
something like Order.find(:all, :conditions => "items.id = 2 AND
items.id = 5 AND ...", :include => [:items]) .
Obviously the query above doesn't work, but I can't figure out how to do
that.

Any suggestions?

Thanks in advance
Bharat R. (Guest)
on 2009-05-11 16:26
(Received via mailing list)
I think that the condition that you are looking for is:

:condition => item.id in (2,4,6,11,...etc.)
Serafino P. (Guest)
on 2009-05-11 18:49
Bharat R. wrote:
> I think that the condition that you are looking for is:
>
> :condition => item.id in (2,4,6,11,...etc.)

Thanks for your answer.
This performs a OR, find all Ordrers having at least one of the ids
specified inside IN() .
Colin L. (Guest)
on 2009-05-11 19:52
(Received via mailing list)
I think you can do it the other way around, do the find on the items,
where
the item id is in one of the set. Then the orders you are looking for
are
the ones in the returned rows as item.order. Then you just need to
select
the unique orders.

Colin

2009/5/11 Serafino P. <removed_email_address@domain.invalid>
This topic is locked and can not be replied to.