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