Frage

Ich erstelle eine Website für soziale Netzwerke. Ich habe eine Tabelle von Benutzern. Jeder Benutzer kann eine Reihe anderer Benutzer als Freunde haben, daher habe ich eine zweite Tabelle Freunde:

user_id
friend_id

Basierend auf dieser Antwort versuche ich, die Beziehungen zu schaffen. Ich habe,

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
  ...

und

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

Wenn ich versuche, die Tabellen damit aus meiner Ansicht zu verwenden:

<% @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 %>

Die zurückgegebenen Namen sind immer die des Quellbenutzers und nicht der Zielfreund.

War es hilfreich?

Lösung

Okay, ich habe es gelöst: Ändern Sie den zweiten Eintrag unter dem Benutzer in:

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

Ich bin mir immer noch nicht sicher, ob der Code in der Frage einen unnötigen Crud drin hat?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top