2009-12-18 7 views
0

Dites qu'il existe deux modèles: Utilisateur et Post, je veux garder la trace de qui a lu quel poste, et qui écrit quel poste, quels favoris de l'utilisateur qui poste etc . Ensuite, je viens avec la solution suivante:comment spécifier plusieurs relations entre les modèles dans les rails en utilisant les associations ActiveRecord

class User < ActiveRecord::Base 
    has_many :writings 
    has_many :posts, :through => :writings 
    has_many :readings 
    has_many :posts, :through => :readings 
    #.. 
end 

class Post < ActiveRecord::Base 
    has_many :writings 
    has_many :posts, :through => :writings 
    #... 
end 

et la mise en place des modèles intermédiaires - écriture, lecture. cela fonctionne, mais finalement je trouve que quand j'écrire ce

@user.posts #... 

le tableau retourné contient des informations d'ordre administratif à la fois pour des écrits et des lectures. Comment puis-je résoudre ce problème.

Répondre

9

Vous voulez quelque chose comme ceci:

class User < ActiveRecord::Base 
    has_many :writings 
    has_many :posts, :through => :writings 
    has_many :readings 
    has_many :read_posts, :through => :readings, :class_name => "Post" 
    #.. 
end 

En donnant le nom de l'association autre chose que juste: les messages que vous pouvez vous référer à chacun individuellement. Maintenant ...

@user.posts # => posts that a user has written via writings 
@user.read_posts # => posts that a user has read via readings 
Questions connexes