Я хочу выполнить поиск по 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}))
Это то, что попадет в мое приложение.