ruby-on-rails - 如何在相同的两个类之间进行多个 has_and_belongs_to_many 关联?

标签 ruby-on-rails has-and-belongs-to-many

我有以下设置:

class Publication < ActiveRecord::Base
  has_and_belongs_to_many :authors, :class_name=>'Person', :join_table => 'authors_publications'
  has_and_belongs_to_many :editors, :class_name=>'Person', :join_table => 'editors_publications'
end

class Person < ActiveRecord::Base
  has_and_belongs_to_many :publications
end

有了这个设置,我可以做 Publication.first.authors 之类的事情.但是如果我想列出一个人参与的所有出版物Person.first.publications , 关于缺少连接表的错误 people_publications它抛出。我怎么能解决这个问题?

我应该为作者和编辑切换到单独的模型吗?然而,它会给数据库带来一些冗余,因为一个人可以是一个出版物的作者和另一个出版物的编辑。

最佳答案

您关联的另一端可能应该被称为 authored_publicationsedited_publications额外的只读 publications返回两者并集的访问器。

否则,如果你尝试做类似的事情,你会遇到棘手的情况

person.publications << Publication.new

因为你永远不会知道这个人是作者还是编辑。并不是说通过稍微改变你的对象模型就不能以不同的方式解决这个问题。

您还可以在 ActiveRecord 中执行一些 hack 来更改 SQL 查询或更改关联的行为,但也许只是保持简单?

关于ruby-on-rails - 如何在相同的两个类之间进行多个 has_and_belongs_to_many 关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2876312/

相关文章:

ruby-on-rails - Rails Memcached 缓存

ruby-on-rails - Rails、二维表、pivot、嵌套散列循环

orm - 如何在 strongloop 环回中一次更新多个模型的 hasandbelongstomany 关系

ruby-on-rails - Rails 4.2 保存 has_and_belongs_to_many 关联 ID

ruby-on-rails - 在 Rails 中实现标签 : How to reference multiple items with one tag?

has-and-belongs-to-many - 如何在没有 HABTM 的情况下使用 Lithium 编写标签云?

ruby-on-rails - Gem 将图像裁剪为 rails 中的多种尺寸

ruby-on-rails - 访问 Controller 中模型方法内定义的变量。

ruby-on-rails - 为什么设计将 sign_up 错误重定向到不同的页面?

mysql - 使用 MySQL "in"导致循环?