ActiveRecord: Criando um relacionamento um para muitos de volta para si mesmo
-
18-09-2019 - |
Pergunta
Estou construindo um site de redes sociais. Eu tenho uma tabela de usuários. Cada usuário pode ter vários outros usuários como amigos, então eu tenho uma segunda tabela amigos:
user_id
friend_id
Com base nesta resposta, estou tentando criar os relacionamentos. Eu tenho,
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
...
e
class Friend < ActiveRecord::Base
belongs_to :user
belongs_to :source_friend, :class_name => "User", :foreign_key => "friend_id"
end
Quando tento usar as mesas com isso na minha opinião:
<% @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 %>
Os nomes retornados são sempre os do usuário de origem, em vez do amigo -alvo.
Solução
Ok, eu resolvi: altere a segunda entrada sob usuário para:
has_many :users, :through => :friends, :source => :source_friend
Ainda não tenho certeza se o código da pergunta tem algum crud desnecessário lá?
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow