Вы должны указать несколько отношений внутри пользовательской модели, чтобы она знала, к какой конкретной ассоциации она будет присоединена.
class Link < ActiveRecord::Base
belongs_to :src_user, class_name: 'User'
belongs_to :dst_user, class_name: 'User'
end
class User < ActiveRecord::Base
has_many :src_links, class_name: 'Link', inverse_of: :src_user
has_many :dst_links, class_name: 'Link', inverse_of: :dst_user
end
Опция: class_name должна быть указана, поскольку имя ассоциации не просто: links. Вам также может понадобиться указать параметр: inverse_of в модели Link, но я не уверен в этом. Хотя, если бы ты это сделал, не повредило бы.
Чтобы сделать звонок @ user.links, вам нужно сделать что-то вроде этого:
class User < ActiveRecord::Base
def links
Link.where(['src_user = ? OR dst_user = ?', self.id, self.id])
end
end
… поскольку ActiveRecord не позволяет объединять две ассоциации на одной модели в одну.