我有以下设置:
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
的错误。我怎么能解决这个问题?
我是否可以切换到作者和编辑的单独模型?然而,它会给数据库带来一些冗余,因为一个人可以是一个出版物的作者和另一个出版物的编辑。
答案 0 :(得分:3)
你的关联的另一端应该被称为类似authored_publications
和edited_publications
的东西,带有一个额外的只读publications
访问器,它返回两者的并集。
否则,如果您尝试执行类似
之类的操作,则会遇到棘手的情况person.publications << Publication.new
因为你永远不会知道这个人是作者还是编辑。并不是通过略微改变对象模型就无法解决这个问题。
你也可以在ActiveRecord中修改SQL查询或改变关联的行为,但也许只是保持简单?
答案 1 :(得分:0)
我相信你应该在person
模型
class Person < ActiveRecord::Base
# I'm assuming you're using this names for your foreign keys
has_and_belongs_to_many :author_publications, :foreign_key => :author_id
has_and_belongs_to_many :editor_publications, :foreign_key => :editor_id
end