2010-10-15 36 views
0
p = Person.find_by_id(1, :include => :bags, :conditions => ['bag.id in (?), [3,4]) 

我想知道我怎么能保证这个查询只能是有效的,如果这两个“items.id”“3” &“4”的存在,而不是' 3'或/和'4'。导轨 - 条件包括多个项目在数组

感谢

+0

请解释一下你越要完成什么。 – 2010-10-15 05:54:25

+0

In Plain SGL:SELECT * FROM persons p INNER JOIN bags_persons b1 ON b1.person_id = p.id INNER JOIN bags_persons b2 ON b2.person_id = p.id WHERE b1.bag_id = 3 AND b2.bag_id = 4点是您需要加入2次才能同时搜索两个行李。也许有一种更好的方式来写在rails中,但是:连接和条件你可以将这个查询翻译成查找语法。 – giraff 2010-10-15 07:00:39

+0

顺便说一下,:包括主要用于在产生的人对象中预取袋子,因此如果在请求后没有访问袋子:连接就足够了。 – giraff 2010-10-15 07:04:22

回答

1

您需要手动构建你2内连接到bags_persons表:

Person.find_by_id(1, :joins => "INNER JOIN bags_persons bp1 ON bp1.person_id=persons.id INNER JOIN bags_persons bp2 ON bp2.person_id=persons.id", :conditions => "bp1.bag_id=3 AND bp2.bag_id=4") 

希望这有助于