繁体   English   中英

替代Rails单表继承(STI)?

[英]Alternative to Rails Single Table Inheritance (STI)?

我有一个非常适合STI的模型和表格。 我的表称为Finances ,有两种类型:收入和支出。 除了type还有其他三列: descriptionamountdate

我在Rails中使用STI感到非常紧张,因为它需要一些技巧。 我对Rails太陌生,无法破解代码。 即使有效,我也不明白。 那似乎很危险。

我的问题是,如果不使用STI,如何设置模型,控制器和视图? 有什么最佳实践可以对模型中的项目进行分组? 还是在设置视图之前执行Finances.where("type = 'Income'")

编辑:我的要旨是显示我正在使用的代码。 当我运行它时,出现错误:

undefined method `incomes_path' for #<#<Class:0x007fbc95f60b40>:0x007fbc93883220>

首先,使用STI是Rails的标准功能,因此无需感到紧张。 并且不需要“黑客”。 许多开发人员已经非常成功地使用了它。 如您所见,您可以在网上找到教程和一般信息。

另一方面,如果您决定不使用STI,则可以选择使用
(a)使用自己的表格完全分离模型,这将导致大量重复的代码 ,或者
(b)手动创建自定义的“ 类似于STI的行为”。 要了解有关Rails的更多信息,第二个选项至少可能很有趣。

例如,在您的“ Finances模型中,您将定义范围incomes ,例如

scope :incomes, where(:type => 'Income')

然后您可以执行Finances.incomes

然后,如果您有仅适用于一种类型的方法,则应检查所有记录是否有效地属于所需类型。

就个人而言,我建议您使用STI。 您可以免费获得许多功能,并且是以Rails方式进行的 例如,想象一下其他开发人员阅读您的代码,他们会问自己,为什么您不使用STI,将其归咎于无知,如果需要的话,可以使用STI对其进行重构。

如果您使用这样的继承结构,则STI最好。 您实际上并不需要使用Finances.where("type = 'Income'") 您可以简单地使用Income.all 请参阅这些帖子,如果他们有帮助。 http://www.therailworld.com/posts/18-Single-Table-Inheritance-with-Rails http://juixe.com/techknow/index.php/2006/06/03/rails-single-table-inheritance /

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM