HABTM: AND on associated table records

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

I think that the condition that you are looking for is:

:condition => item.id in (2,4,6,11,...etc.)

Bharat Ruparel 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() .

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