Возврат исходных объектов в самореференции has_many,:through

Вот моя модель пользователя:

class User < ActiveRecord::Base

  has_many :friends, :class_name => 'Friendship', :dependent => :destroy

end

Вот моя модель дружбы:

class Friendship < ActiveRecord::Base

  belongs_to :user
  belongs_to :friend, :class_name => 'User', :foreign_key => 'friend_id'

  set_table_name :users_users
end

Хорошо. Так что на самом деле в моем приложении нет сценария, в котором мне нужен объект дружбы. Например, когда я вызываю User.find(1).friends, я не хочу возвращать массив объектов дружбы. Я на самом деле хочу пользовательские объекты.

ПОЭТОМУ, когда я вызываю User.find(1).friends, как я могу заставить его возвращать объекты User?

1 ответ

Решение

Вы уверены, что не хотите этого?

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

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

После этого User.find(1).friends вернет массив Users, а не Friendships.

Другие вопросы по тегам