好的,我最近有great answers to a question about how to do some sub-selects in an activerecord query。我现在有一个更复杂的情况,我无法弄清楚。
我想在3个表中进行搜索,这些表与a:,例如
具有多对一关系class User << ActiveRecord::Base
has_many :pets
has_many :parasites, :through => :pets
end
class Pet << ActiveRecord::Base
has_many :parasites
belongs_to :users
end
class Parasite << ActiveRecord::Base
belongs_to :pets
end
现在让我说我有一些像这样的数据
users
id name
1 Bob
2 Joe
3 Brian
pets
id user_id animal
1 1 cat
2 1 dog
3 2 cat
4 3 dog
parasites
id pet_id bug
1 1 tick
2 2 flea
3 3 tick
4 3 flea
5 4 tick
我想要做的是创建一个有效的记录查询,该查询将返回一个宠物同时具有蜱虫和跳蚤的用户(即用户2 - 乔)
这远远超出了我的主动记录和sql技能,到目前为止我甚至都懒得向你展示我的拙劣尝试。
答案 0 :(得分:1)
这与上一个问题几乎相同,你只需要在子选择上深入挖掘一个级别:
User.where('id IN (SELECT user_id FROM pets WHERE
id IN (SELECT pet_id FROM parasites WHERE bug = ?) AND
id IN (SELECT pet_id FROM parasites WHERE bug = ?))', 'flea', 'tick')