2012-03-02 25 views
6

En modelo de objetos, tengohas_many múltiple: a través de

has_many :likes 
has_many :hates 
has_many :users, :through => :likes 
has_many :users, :through => :hates 

¿Cómo consigo la lista de usuarios para los gustos? P.ej. object.users < --- pero ¿cómo especifico a través de Me gusta u Odio?

Respuesta

6

Debe dar a estas dos asociaciones diferentes nombres diferentes. ¿Qué hay de

has_many :likes 
has_many :hates 
has_many :likers, :through => :likes, :source => :user 
has_many :haters, :through => :hates, :source => :user 
+0

Eso es lo que pensaba, también, pero la documentación de 'HAS_MANY' (en ActiveRecord :: Asociaciones :: ClassMethods) dice: "':. Through' especifica una asociación a través del cual llevar a cabo la consulta [.. .] Las opciones para ': class_name',': primary_key' y ': foreign_key' ** se ignoran **, ya que la asociación usa el reflejo de origen." - Entonces, el ': class_name' no hará nada, ¿o sí? – fanaugen

+0

Tiene razón, actualicé el ejemplo para que sea compatible con la documentación, donde hace referencia a la asociación de origen, de la que se puede inferir que es un objeto Usuario. –

+0

Creo que '' source =>: user' debe ser ': source =>: users'. –

0

Puede hacerlo como:

has_many :user_likes, :through => :likes, :class_name => 'User' 
1

Parece que tengo que añadir fuente también. Si no, Rails buscará likers/likers en Me gusta.

has_many :likes 
has_many :hates 
has_many :likers, :through => :likes, :class_name => 'User', :source => 'user' 
has_many :haters, :through => :hates, :class_name => 'User', :source => 'user' 
Cuestiones relacionadas