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