我有以下设置:
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_publications
和 edited_publications
额外的只读 publications
返回两者并集的访问器。
否则,如果你尝试做类似的事情,你会遇到棘手的情况
person.publications << Publication.new
因为你永远不会知道这个人是作者还是编辑。并不是说通过稍微改变你的对象模型就不能以不同的方式解决这个问题。
您还可以在 ActiveRecord 中执行一些 hack 来更改 SQL 查询或更改关联的行为,但也许只是保持简单?
关于ruby-on-rails - 如何在相同的两个类之间进行多个 has_and_belongs_to_many 关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2876312/