Raylar: Birden fazla koşulla katılın
class Interest < ActiveRecord::Base
has_and_belongs_to_many :user_profiles
end
class UserProfile < ActiveRecord::Base
has_and_belongs_to_many :interests
end
gibi basit bir modelim var. Tüm kullanıcıları belirli bir ilgi alanıyla sorgulamak istediğimde bu oldukça basittir
UserProfile.joins(:interests).where('interests.id = ?', an_interest)
Ama nasıl birden fazla menfaat sahibi olan kullanıcılara bakabilirim? Tabii ki
UserProfile.joins(:interests).where('interests.id = ?', an_interest).where('interests.id = ?', another_interest)
yaparsam, her zaman boş bir sonuç alırım, çünkü birleşimden sonra, hiçbir satırda aynı anda interest.id = an_interest ve interest.id = another_interest olabilir.
ActiveRecord içinde bir yol var "Ben 2 (belirtilen) çıkarları ile ilişkili kullanıcıların listesini istiyorum?
güncelleme (çözüm) Bu ilk çalışma sürümü geldi, Ömer için kudos 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
Bu umduğum gibi çok daha karmaşık! Ama kesinlikle beni doğru yöne işaret ettin. Teşekkürler. Tek fark, yazdığınız gibi “içsel ilgi alanları” yerine “iç ilgi alanları” nı içermek zorunda kaldım. –
... ve aynı zamanda "çıkarlar _ # {idx} .id =?" Ile değiştirin. # _ {Idx} .interest_id =? ' –
ah sağ - M-to-M birleşimiydi? Bu mantıklı olurdu, üzgünüm o kadarını okumamıştı! : D –