ActiveRecord: créer un-à-plusieurs à lui-même
-
18-09-2019 - |
Question
Je construis un site de réseautage social. J'ai une table d'utilisateurs. Chaque utilisateur peut avoir un certain nombre d'autres utilisateurs comme des amis, donc j'ai une deuxième table Amis:
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.
La solution
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?
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow