所以我正在使用Ruby ORM并尝试理解多对多语法和多态。 这是迄今为止我的Active Record关系。
class Association < ActiveRecord::Base
belongs_to :user
belongs_to :friend, class_name: "User"
end
和
class User < ActiveRecord::Base
has_many :associations
has_many :friends, through: :associations
end
当这些朋友与多个用户关联时,我似乎无法获得每个用户的朋友列表。换句话说,一些用户有朋友,这些朋友也可能有多个用户关联。
答案 0 :(得分:0)
首先,这些不是多态关联。当模型可以属于许多模型时,一个使用多态关联,例如Comment
模型。用户可以对帖子,图片和项目进行评论,因此Comment
模型可以属于其中任何一个,因此我们使用多态关联。 Read here了解更多信息。
嗯,你要问的是Inverse Friends,这就是你如何实现它。
class User < ActiveRecord::Base
has_many :associations
has_many :friends, through: :associations
has_many :inverse_associations, class_name: "Association", foreign_key: :friend_id
has_many :inverse_friends, through: :inverse_associations, source: :user
end
class Assocation < ActiveRecord::Base
belongs_to :user
belogns_to :friend, class_name: 'User'
belongs_to :inverse_friend, class_name: 'User', foreign_key: :friend_id
end