[英]Alternative to Rails Single Table Inheritance (STI)?
我有一个非常适合STI的模型和表格。 我的表称为Finances
,有两种类型:收入和支出。 除了type
还有其他三列: description
, amount
和date
。
我在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.