Как найти пользователя, у которого есть кот и собака?

Я хочу выполнить поиск по 2 таблицам, которые имеют отношение «многие к одному», например

class User << ActiveRecord::Base
  has_many :pets
end

class Pet << ActiveRecord::Base
  belongs_to :users
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

Я хочу создать активный запрос записи, который вернет пользователя, у которого есть и кошка, и собака (например, пользователь 1 - Боб).

Моя попытка пока

User.joins(:pets).where('pets.animal = ? AND pets.animal = ?','dog','cat')

Теперь я понимаю, почему это не работает - он ищет домашнее животное, которое одновременно является собакой и кошкой, поэтому ничего не возвращает. Однако я не знаю, как изменить это, чтобы дать мне ответ, который я хочу. У кого-нибудь есть предложения? Кажется, это должно быть легко - это не кажется особенно необычной ситуацией.

--- edit ---

Просто добавлю небольшую кодировку к этому вопросу, поскольку я только что обнаружил Squeel . Это позволяет вам создать такой подзапрос:

User.where{id.in(Pet.where{animal == 'Cat'}.select{user_id} & id.in(Pet.where{animal == 'Dog'}.select{user_id}))

Это то, что будет использоваться в моем приложении.

10
задан brad 18 July 2011 в 02:30
поделиться