tengo un modelo simple comoRieles: unirse con múltiples condiciones
class Interest < ActiveRecord::Base
has_and_belongs_to_many :user_profiles
end
class UserProfile < ActiveRecord::Base
has_and_belongs_to_many :interests
end
Cuando quiero consultar todos los usuarios con un interés específico, que es bastante sencillo de hacer
UserProfile.joins(:interests).where('interests.id = ?', an_interest)
pero ¿cómo puedo buscar usuarios que tienen intereses múltiples? Por supuesto, si lo hago
UserProfile.joins(:interests).where('interests.id = ?', an_interest).where('interests.id = ?', another_interest)
siempre me dan un resultado vacío, ya que después de la unión, ninguna fila puede tener simultáneamente interest.id = an_interest y interest.id = another_interest.
¿Hay una manera de ActiveRecord para expresar "Quiero la lista de usuarios que tienen 2 intereses (especificados) asociado?
de actualización (solución) que es la primera versión de trabajo que se me ocurrió, felicitaciones a 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
¡Eso es mucho más complicado de lo que esperaba :)! Pero definitivamente me apuntaste en la dirección correcta. Gracias. La única diferencia es que tuve que 'internal join interests_user_profiles' en lugar de' intereses de unión interna' como escribiste. –
... y también reemplaza 'intereses _ # {idx} .id =?' Con 'intereses _ # {idx} .interest_id =?' –
ah bien - ¿fue una fusión M-a-M? eso tendría sentido, ¡lo siento, no leí tan poco! :RE –