Rails 3:自定义类型的Rails方法是什么?

时间:2012-03-22 15:39:08

标签: ruby-on-rails ruby-on-rails-3 types ruby-on-rails-3.1 custom-type

我现在正在Ruby on Rails上做一个相当复杂的模型,我想知道为属性做“自定义类型”的正确“Rails”方式是什么。例如,我有一个表businesses,其中包含字符串属性region。但是区域只能是预定义的可能性列表之一(以后可以扩展)。我的问题是:我在哪里定义这种区域类型?

我知道我可以创建一个特定的regions表(即一个Region模型),它可以包含所有选项,然后我可以在具有该表的区域的模型之间建立关联。问题是我的模型上有很多这样的类型,所以我最终会在我的数据库中有超过一半的表是“自定义类型表”,它只存储这些类型的可能值。这有用吗?

我还读到你可以通过验证来做到这一点(即在保存记录时验证,变量在可能的值范围内)。这似乎非常不切实际,因为我想使这个模型可扩展,并且表单视图需要将类型的可能值加载到选择框等。如果我使用此方法,每次我需要为a添加新的可能值类型,我必须更改验证和视图。

有没有一种标准的方式来做这样的事情?像定义类型(可能没有DB支持的模型?),我可以轻松列出所有可能的值?

感谢您对此提供任何帮助或建议。在做RoR应用程序的过程中,我一直困扰着我,而且我已经厌倦了乱砍它。

1 个答案:

答案 0 :(得分:1)

我想有很多不同的方法可以做到这一点。就个人而言,我会保持简单和干燥。

在初始化程序中,在全局范围内设置数组:

REGIONS = ["region A", "region B", "region C"]

在模型中,使用您编写的验证。检查该值是否在REGIONS数组中。

在视图中,使用Rails助手填充REGIONS数组中的选择,无线电等。如果您总是使用相同的select,请编写自己的帮助程序region_select。