ruby-on-rails - ruby on rails has_many :through association which has two columns with same model

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

我有以下模型:

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/

相关文章:

ruby-on-rails - 通过组关系列出属于用户的文档模型的所有实例

ruby-on-rails - 无法在 CommentsController#destroy 中重定向到 Nil(多态关联)

ruby-on-rails - before_validation,在 : :save vs before_save

ruby-on-rails - 在 Ubuntu 9.10 上安装 Rails 的最佳安装指南是什么?

ruby-on-rails - Ruby 更新后 Rails 3.1rc4 Assets 管道中断?如何重新激活/配置它?

php - 在一个 View 中使用同一数据库中的两个表 Codeigniter

ruby-on-rails - Rails 3 使用参数重定向到外部页面

c# - 创建 ADO.NET 模型时如何在应用程序代码中设置敏感数据?d 一些标记 a

entity-framework - ADO.Net 实体模型 (edmx) 与 Entity Framework (v4.0 等)

ruby-on-rails - Rails 无法正常工作