ruby on rails has_many:通过关联,其中有两列具有相同的模型

我有以下型号:

class UserShareTag  "User" belongs_to :post belongs_to :sharee, :class_name => "User" validates :sharer_id, :presence => true validates :sharee_id, :presence => true validates :post_id, :presence => true end 

在Post模型中,我有以下几行:

 has_many :user_share_tags, :dependent => :destroy has_many :user_sharers, :through => :user_share_tags, :uniq => true, :class_name => "User" has_many :user_sharees, :through => :user_share_tags, :uniq => true, :class_name => "User" 

我如何表达:user_sharers应该对应于:sharer_id? 和:user_sharees应该对应于:sharee_id? 由于它们都是相同的用户模型,我不确定该怎么做。

一些相关的问题 – 在用户模型中我有:

 has_many :user_share_tags, :dependent => :destroy has_many :user_shared_posts, :through => :user_share_tags, :uniq => true, :class_name => "Post" has_many :recommended_posts, :through => :user_share_tags, :uniq => true, :class_name => "Post" 

如何合并以下附加逻辑:user_shared_posts应包含以下内容:sharer_id是user_id? 并且:recommended_posts应该包含以下内容:sharee_id是user_id?

提前致谢!

您只需要在has_many关联中添加:source参数(并且您不需要:class_name选项):

 has_many :user_sharers, :through => :user_share_tags, :source => :sharer, :uniq => true, :class_name => "User" has_many :user_sharers, :through => :user_share_tags, :source => :sharee, :uniq => true, :class_name => "User" 

然后在您的User模型中,您需要一个额外的has_many关联:

 has_many :user_share_tags_as_sharee, :class_name => "UserShareTag", :foreign_key => :sharee_id, :dependent => :destroy has_many :user_share_tags_as_sharer, :class_name => "UserShareTag", :foreign_key => :sharer_id, :dependent => :destroy has_many :user_shared_posts, :source => :post, :through => :user_share_tags_as_sharer, :uniq => true has_many :recommended_posts, :source => :post, :through => :user_share_tags_as_sharee, :uniq => true