我有以下模型:
class UserShareTag < ActiveRecord::Base
attr_protected :sharee_id, :post_id, :sharer_id
belongs_to :sharer, :class_name => "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 的帖子?
提前致谢!
最佳答案
您只需将 :source
参数添加到您的 has_many
关联(并且您不需要 :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
关于ruby-on-rails - ruby on rails has_many :through association which has two columns with same model,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6195916/