Rails单表inheritance(STI)的替代方案?

我有一个模型和桌子,我相信它非常适合STI。 我的表叫做Finances ,有两种类型:收入和支出。 除了type还有其他三列: descriptionamountdate

我在Rails中使用STI时非常紧张,因为它需要一些黑客攻击。 我太新了Rails来破解代码。 即使它有效,我也不明白。 这似乎很危险。

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

编辑:我做了一个要点,以显示我正在使用的代码。 当我运行它时,我收到错误:

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

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

另一方面,如果您决定不使用STI,您可以选择使用
(a)使用自己的表完全分离模型,这将导致大量重复的代码 ,或
(b)手工制作定制的“ 类似STI ”的行为。 第二个选项至少可以让人了解有关Rails的更多信息。

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

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

然后你可以做Finances.incomes

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

就个人而言,我建议你使用STI。 你可以免费获得很多function,而你正在使用Rails方式 。 想象一下,例如,其他开发人员阅读你的代码,他们会问自己,为什么你没有使用STI,将其归咎于无知,并且 – 如果需要 – 使用STI重构它。

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