Как мне найти пользователя, у которого есть как блохи, так и клещи: через домашних животных? - PullRequest
3 голосов
/ 15 июля 2011

ОК, у меня недавно были отличные ответы на вопрос о том, как сделать некоторые подвыборы в запросе activerecord .Теперь у меня есть более сложная ситуация, которую я не могу понять.

Я хочу выполнить поиск по 3 таблицам, которые имеют отношение многие-к-одному с: through, например,

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 - Джо)

Это настолько далеко от моих навыков activerecord и sql, что я даже не стану показывать вам мои неудачные попытки.

1 Ответ

1 голос
/ 15 июля 2011

Это почти то же самое, что и предыдущий вопрос, вам нужно только копать на один уровень глубже на подвыборах:

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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...