【问题标题】:ruby on rails has_many :through association which has two columns with same modelruby on rails has_many:通过关联,它有两个具有相同模型的列
【发布时间】:2011-09-05 22:59:39
【问题描述】:

我有以下型号:

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 的帖子?

提前致谢!

【问题讨论】:

    标签: ruby-on-rails model associations has-many-through


    【解决方案1】:

    您只需将: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
    

    【讨论】:

    • 源参数有什么作用?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多