2009-09-26 7 views
1

Je construis un site de réseautage social. J'ai une table des utilisateurs. Chaque utilisateur peut avoir un certain nombre d'autres utilisateurs comme des amis, donc j'ai une seconde table Amis:ActiveRecord: créer une relation un-à-plusieurs avec lui-même

user_id 
friend_id 

Sur la base de cette réponse que je suis en train de créer des relations. J'ai,

class User < ActiveRecord::Base 
    has_many :friends, :dependent => :destroy 
    has_many :users, :through => :friends 

    has_many :source_friend, :class_name => "Friend", :foreign_key => "friend_id", :dependent => :destroy 
    has_many :source_users, :class_name => "User", :through => :friend_id 
    ... 

et

class Friend < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :source_friend, :class_name => "User", :foreign_key => "friend_id" 
end 

Quand j'essaie d'utiliser les tables avec ce à mon avis:

<% @user.users.each do |friend| %> 
    <% if friend.status == User::ACTIVE %> 
    <p> 
     <%= link_to h(friend.name), :controller => "user", :id => h(friend.name)%> 
    </p> 
    <% end %> 
<% end %> 

les noms retournés sont toujours ceux de l'utilisateur source, plutôt que l'ami cible.

Répondre

0

D'accord, je l'ai résolu: changer la deuxième entrée utilisateur sous à:

has_many :users, :through => :friends, :source => :source_friend 

Je ne suis toujours pas sûr si le code dans la question a quelque crud inutiles là-dedans?

Questions connexes