Попробуйте это:
class User < ActiveRecord::Base
has_many :user_gifts
has_many :gifts, :through => :user_gifts
has_many :rcvd_user_gifts, :class_name =>"UserGift", :foreign_key => :friend_id
has_many :rcvd_gifts, :through => :rcvd_user_gifts, :source => :gift
end
class UserGift < ActiveRecord::Base
# user_id
# friend_id
# gift_id
belongs_to :user
belongs_to :friend, :class_name => "User"
belongs_to :gift
end
class Gift < ActiveRecord::Base
has_many :user_gifts
has_many :senders, :through => :user_gifts, :source => :user
has_many :receivers, :through => :user_gifts, :source => :friend
end
Теперь возможны следующие звонки:
user.gifts # Gifts given by a user:
user.rcvd_gifts # Gifts received by a user:
gift.senders # Users sending a gift
gift.receivers # Users receiving a gift
Убедитесь, что вы индексировали столбцы user_id
, friend_id
, gift_id
в таблице user_gifts
.