我现在正在Ruby on Rails上做一个相当复杂的模型,我想知道为属性做“自定义类型”的正确“Rails”方式是什么。例如,我有一个表businesses
,其中包含字符串属性region
。但是区域只能是预定义的可能性列表之一(以后可以扩展)。我的问题是:我在哪里定义这种区域类型?
我知道我可以创建一个特定的regions
表(即一个Region模型),它可以包含所有选项,然后我可以在具有该表的区域的模型之间建立关联。问题是我的模型上有很多这样的类型,所以我最终会在我的数据库中有超过一半的表是“自定义类型表”,它只存储这些类型的可能值。这有用吗?
我还读到你可以通过验证来做到这一点(即在保存记录时验证,变量在可能的值范围内)。这似乎非常不切实际,因为我想使这个模型可扩展,并且表单视图需要将类型的可能值加载到选择框等。如果我使用此方法,每次我需要为a添加新的可能值类型,我必须更改验证和视图。
有没有一种标准的方式来做这样的事情?像定义类型(可能没有DB支持的模型?),我可以轻松列出所有可能的值?
感谢您对此提供任何帮助或建议。在做RoR应用程序的过程中,我一直困扰着我,而且我已经厌倦了乱砍它。
答案 0 :(得分:1)
我想有很多不同的方法可以做到这一点。就个人而言,我会保持简单和干燥。
在初始化程序中,在全局范围内设置数组:
REGIONS = ["region A", "region B", "region C"]
在模型中,使用您编写的验证。检查该值是否在REGIONS
数组中。
在视图中,使用Rails助手填充REGIONS
数组中的选择,无线电等。如果您总是使用相同的select,请编写自己的帮助程序region_select。