2009-09-26 6 views
1

Я строил сайт социальной сети. У меня есть таблица пользователей. Каждый пользователь может иметь целый ряд других пользователей, как друзья, так что у меня есть вторая таблица Друзья:ActiveRecord: создание отношения «один ко многим» назад к себе

user_id 
friend_id 

На основании этого ответа я пытаюсь создать отношения. У меня есть,

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

и

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

Когда я пытаюсь использовать таблицы с этим, на мой взгляд:

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

имена возвращаемые всегда те из исходного пользователя, а чем целевой друг.

ответ

0

Хорошо, я решил это: изменить вторую запись под Пользователем:

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

Я до сих пор не уверен, если код в вопросе есть некоторые ненужные CRUD там?