【问题标题】:Rails 3: What is the correct Rails way of doing custom types?Rails 3:做自定义类型的正确 Rails 方式是什么?
【发布时间】:2012-04-07 05:07:18
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    在视图中,使用 Rails 助手从 REGIONS 数组中填充选择、单选等。如果你总是有相同的选择,例如编写你自己的辅助 region_select。

    【讨论】:

    • 这似乎是我正在尝试做的一个很好的解决方案。非常感谢!我仍然会为应用程序在运行时扩展的自定义类型制作一些自定义类型表/模型,但其余的自定义类型可以使用此方法完美定义。
    猜你喜欢
    • 2021-07-24
    • 2020-06-27
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多