ActiveRecord: la creazione di una relazione uno-a-molti a se stesso
-
18-09-2019 - |
Domanda
Sto costruendo un sito di social networking. Ho una tabella di utenti. Ogni utente può avere un certo numero di altri utenti come amici, quindi ho una seconda tabella Amici:
user_id
friend_id
In base a questa risposta che sto cercando di creare le relazioni. Ho,
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 provo e utilizzare le tabelle con questo, a mio avviso:
<% @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 %>
i nomi restituiti sono sempre quelli degli utenti di origine, piuttosto che l'amico di destinazione.
Soluzione
Va bene, ho risolto: cambiare la seconda voce in Utente da:
has_many :users, :through => :friends, :source => :source_friend
Non sono ancora sicuro se il codice in questione ha una certa CRUD non necessari in là?
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow