通过几个模型构建has_many的最佳方法是什么?

时间:2013-09-18 14:54:59

标签: ruby-on-rails

我正在建立一个教科书数据库。 Book看起来像这样:

图书

  • ID
  • 标题
  • ISBN
  • 作者
  • 受试者
  • 大学
  • 教授

虽然一本书(显然)只有一个标题或ISBN - 我希望作者,科目,大学和教授成为一种“标签”。一本书可以由多位作者撰写,可用于由多位教授教授的多个课程中的多个科目。所以我想为每个人建立一个多对多的关系。例如Author可能看起来像:

作者

  • ID
  • 名称

对于我来说,书籍属于作者并不一定有意义,反之亦然(虽然我可能是错的。)但我也不知道创建book_author_associations表,{{{ 1}}模型,book_jubjects_associations模型等

最好的方法是创建多个像这样的manys?

2 个答案:

答案 0 :(得分:3)

没有测试,但理论上应该有效:

Book
  has_many :book_associations
  has_many :associations, through: :book_associations

BookAssociation
  belongs_to :book
  belongs_to :association, polymorphic: true
  validates :book_id, presence: true
  validates :association_id, presence: true
  validates :association_type, presence: true

Author
  has_many :book_associations, as: :association
  has_many :books, through: :book_associations

Subject
  has_many :book_associations, as: :association
  has_many :books, through: :book_associations

答案 1 :(得分:1)

在这种情况下,连接表是不可避免的。

您应该继续为类,主题,作者等创建单独的表,因为它们具有非常不同的属性。您应该通过连接表将它们与书籍相关联,这些连接表大部分都有自己的属性。

例如,一本书的撰稿人可以是作者,或者他们可以是编辑,或摄影师,翻译,或任何其他角色,并且该角色将是书籍之间关联的属性和作者(最好称他们为贡献者)。

有关此类事物的更多信息,您可以查看EDItEUR的Onix代码列表,了解有关书籍元数据结构的想法。 http://www.editeur.org/14/Code-Lists/