Schienen: join mit mehreren Bedingungen

Habe ich ein einfaches Modell wie

class Interest < ActiveRecord::Base
  has_and_belongs_to_many :user_profiles
end

class UserProfile < ActiveRecord::Base
  has_and_belongs_to_many :interests
end

Wenn ich Abfragen möchte alle Benutzer mit einem bestimmten Interesse, das ist ziemlich einfach zu tun

UserProfile.joins(:interests).where('interests.id = ?', an_interest)

Aber wie kann ich für Benutzer, die mehrere Interessen? Natürlich, wenn ich

UserProfile.joins(:interests).where('interests.id = ?', an_interest).where('interests.id = ?', another_interest)

Bekomme ich immer ein leeres Ergebnis, da nach dem Beitritt, keine Zeile können gleichzeitig Interesse.id = an_interest und Interesse.id = another_interest.

Gibt es eine Möglichkeit in ActiveRecord zum express, "ich will die Liste der Benutzer 2 (angegebenen) Interessen verknüpft?

update (Lösung) das ist die erste funktionierende version, die ich gekommen, ein dickes Lob an Omar Qureshi

    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
Schreibe einen Kommentar