У меня есть простая модель, такая как
class Interest < ActiveRecord::Base
has_and_belongs_to_many :user_profiles
end
class UserProfile < ActiveRecord::Base
has_and_belongs_to_many :interests
end
Когда я хочу опросить всех пользователей с определенными интересами, это довольно просто сделать
UserProfile.joins(:interests).where('interests.id = ?', an_interest)
Но как мне искатьпользователи, которые имеют несколько интересов?Конечно, если я делаю
UserProfile.joins(:interests).where('interests.id = ?', an_interest).where('interests.id = ?', another_interest)
, я всегда получаю пустой результат, поскольку после объединения ни одна строка не может одновременно иметь интереса .id = an_interest и интереса.id = another_interest.
есть ли способ в ActiveRecord выразить: «Я хочу, чтобы список пользователей, у которых были связаны 2 (указанные) интересы?»
обновление (решение) это первая рабочая версия, которую я предложил, славаОмар Куреши
specified_interests.each_with_index do |i, idx|
main_join_clause = "interests_#{idx}.user_profile_id = user_profiles.id"
join_clause = sanitize_sql_array ["inner join interests_user_profiles interests_#{idx} on
(#{main_join_clause} and interests_#{idx}.interest_id = ?)", i]
relation = relation.joins(join_clause)
end