2013-05-20 3 views
1

У меня есть модель Friends с user_id и friend_id ... и те, и другие обращаются к конкретным пользователям.Ассоциация через нестандартную колонку?

То, что я хотел бы иметь возможность сделать что-то вроде этого:

@relationship = Friend.find_by_user_id(current_user.id) 
@relationship.friend.username 

Где я могу в основном тянуть пользователя через friend_id колонку таким же образом я могу сделать @relationship.user.username.

Как бы настроить мои ассоциации, чтобы снять это?

ответ

0

Используйте class_name, если ваш столбец не отражает конвенции ожидается:

class Friendship < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :friend, class_name: 'User' 
end 

Обратите внимание, что я изменил название модели на Friendship, чтобы лучше отразить использование этой модели. Кроме того, вы можете сделать его проще для себя, если вы пересмотреть свой User модель, чтобы выглядеть следующим образом:

class User < ActiveRecord::Base 
    has_many :friendships 
    has_many :friends, :through => :friendships 

    has_many :friendships_of, :class_name => 'Friendship', :foreign_key => :friend_id 
    has_many :friends_of, :through => :friendships_of, :source => :user 
end 

Теперь, чтобы увидеть друзей этого пользователя:

current_user.friends.map(&:username) 

И видеть, кто «подружился» пользователь:

current_user.friends_of.map(&:username)