Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.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 什么时候创建一个单独的模型作为Rails中的其他类属性?_Ruby On Rails_Ruby_Database_Sqlite - Fatal编程技术网

Ruby on rails 什么时候创建一个单独的模型作为Rails中的其他类属性?

Ruby on rails 什么时候创建一个单独的模型作为Rails中的其他类属性?,ruby-on-rails,ruby,database,sqlite,Ruby On Rails,Ruby,Database,Sqlite,我有一本书的模型。出版商的名称和类型(惊悚片、恐怖片、幻想片等)是创作新书所必需的 我想知道,我应该在什么时候创建新的表和模型,例如为类型创建新的表和模型,以便使用book.genres访问book的类型,以及什么时候可以只使用一个简单的字符串变量来定义属性 我在想,这取决于我是否想按出版商/流派的名称访问不同的书籍,但无论如何,可以使用sql查询来完成,不是吗 我需要澄清这件事。什么时候创建一个单独的模型和表?关于您的问题,没有特定于Rails的,甚至没有特定于数据库的。相反,您应该从面向对象

我有一本书的模型。出版商的名称和类型(惊悚片、恐怖片、幻想片等)是创作新书所必需的

我想知道,我应该在什么时候创建新的表和模型,例如为类型创建新的表和模型,以便使用book.genres访问book的类型,以及什么时候可以只使用一个简单的字符串变量来定义属性

我在想,这取决于我是否想按出版商/流派的名称访问不同的书籍,但无论如何,可以使用sql查询来完成,不是吗


我需要澄清这件事。什么时候创建一个单独的模型和表?

关于您的问题,没有特定于Rails的,甚至没有特定于数据库的。相反,您应该从面向对象设计的角度来处理它——答案是“这取决于”。如果不考虑你试图解决的问题,就没有单一的正确答案


在这个特定的情况下,我会考虑在代码中定义<代码>类型>代码>它自己的模型,如果您需要定义在代码< > < < />代码>模型中逻辑上不符合的特定类型属性。例如,如果要为库建模,可能需要通过

体裁
上的
儿童友好型
属性指定某些体裁适合年轻读者。或者,如果您正在为书店建模,则可以使用
类型
来指定书籍应显示在书店的哪个部分。

如果您有不同模型的公共字段,那么您应该使用
单表继承
,只需在表中添加一个类型字段即可。此字段包含
型号
名称

关于单表继承,您可以参考下面的链接
我的一般经验是尽可能避免表中的重复,并考虑将来需要更改这个属性的可能性和容易程度。

创建
类型
表格

此解决方案消除了
书籍
表中的字符串重复。它还使更改流派名称成为一个简单的单更改修复,而不是多更改修复。您只需在流派表中更改一次名称,而不是查找具有旧流派名称的所有记录并使用新名称更新它们。此外,向每个类型添加新属性(例如适当的年龄范围,或指示它是否是另一个类型的子类型)会容易得多,因为表已经设置好了

ActiveRecord::Enum
另一个解决方案是使用ActiveRecord的。这与
genres
表具有相同的内存节省和一些易于编辑的优点,但还有一些用于设置和检查书籍实例的流派值的辅助方法,例如,如果您有一个名为“thriller”的流派,则使用enum可以为您提供setter方法
#thriller
和布尔返回方法
#thriller?
免费提供