Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 结构的最佳方式是通过几个模型来实现的?_Ruby On Rails - Fatal编程技术网

Ruby on rails 结构的最佳方式是通过几个模型来实现的?

Ruby on rails 结构的最佳方式是通过几个模型来实现的?,ruby-on-rails,Ruby On Rails,我正在建立一个教科书数据库。书籍的外观如下: 书籍 身份证 头衔 isbn 作者 科目 班级 大学 教授 虽然一本书(显然)只有一个书名或ISBN,但我希望作者、学科、大学和教授成为一种“标签”。一本书可以由多个作者撰写,可以用于由多个教授讲授的多个课程中的多个主题。因此,我想为其中的每一个建立一个多对多的关系。e、 g.作者可能看起来像: 作者 身份证 名字 书 对我来说,书属于作者并不一定有意义,反之亦然(尽管我可能错了)。但我也不知道创建book\u author\u associ

我正在建立一个教科书数据库。
书籍
的外观如下:

书籍

  • 身份证
  • 头衔
  • isbn
  • 作者
  • 科目
  • 班级
  • 大学
  • 教授
虽然一本书(显然)只有一个书名或ISBN,但我希望作者、学科、大学和教授成为一种“标签”。一本书可以由多个作者撰写,可以用于由多个教授讲授的多个课程中的多个主题。因此,我想为其中的每一个建立一个多对多的关系。e、 g.
作者
可能看起来像:

作者

  • 身份证
  • 名字
对我来说,书属于作者并不一定有意义,反之亦然(尽管我可能错了)。但我也不知道创建
book\u author\u associations
表、
book\u jubjects\u associations
模型、
book\u classes\u associations
模型等等


创建这样的多对多的最佳方法是什么?

没有测试,但在理论上应该可行:

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

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

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

在这种情况下,拥有联接表是不可避免的

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

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


有关这类内容的更多信息,您可以查看EDItEUR的Onix代码列表,以了解有关书籍元数据结构的想法

在这种情况下,拥有联接表是不可避免的

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

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


有关这类内容的更多信息,您可以查看EDItEUR的Onix代码列表,以了解有关书籍元数据结构的想法

如果您不想创建联接模型,可以使用
has\u和\u-beliens\u-to\u-many
类型的关联。它们只接受数据库中的联接表,而不接受额外的ActiveRecord模型。更多信息:多态关联?像BookAssociations这样的模型引用了图书id、关联对象id和关联对象类型?如果您不想创建联接模型,可以使用
has\u和\u beliens\u many
类型的关联。它们只接受数据库中的联接表,而不接受额外的ActiveRecord模型。更多信息:多态关联?像BookAssociations这样的模型,它引用图书id、关联对象id和关联对象类型?