ruby-on-rails - rails 3 : What is the correct Rails way of doing custom types?

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

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

我知道我可以制作一个具体的 regions可以容纳所有选项的表(即区域模型),然后我可以在具有该表的区域的模型之间建立关联。问题是我的模型上有很多这些类型,所以我的数据库中超过一半的表是“自定义类型表”,只存储这些类型的可能值。那实用吗?

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

有没有做这种事情的标准方法?像定义类型(也许没有数据库支持的模型?)这样我可以轻松列出所有可能的值?

感谢您对此提供任何帮助或建议。在做 RoR 应用程序时,它一直困扰着我很长时间,我厌倦了围绕它进行黑客攻击。

最佳答案

我想有很多不同的方法可以做到这一点。就我个人而言,我会让事情变得非常简单和干燥。

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

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

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

在 View 中,使用 Rails 助手来填充 REGIONS 中的选择、 radio 等。大批。如果您总是有相同的选择,请编写您自己的帮助器 region_select 例如。

关于ruby-on-rails - rails 3 : What is the correct Rails way of doing custom types?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9825653/

相关文章:

ruby-on-rails - 使用 active_model_serializers 实现 API 版本控制的正确方法

ruby-on-rails - 如何以编程方式获取 Mongoid 正在写入的当前数据库?

ruby - Rails 应用程序中的 RSS 给出错误 : attribute <url> is missing in tag <source>

collections - 我怎样才能拥有一组因关联类型不同而不同的对象?

ruby-on-rails - 如何从现有的 Rails 4 应用程序中删除 ActiveRecord?

ruby-on-rails - activerecord sum 返回一个字符串?

javascript - Ruby on Rails : Create Database Entry without JavaScript

ruby-on-rails - 可以预期这些参数在任何Rails应用程序中总是会提高500吗?

pointers - 带指针的 Golang 类型断言

c - 在 sizeof() 中取消引用指针类型