gpt4 book ai didi

ruby-on-rails - 将模型属性限制为 Rails 中的值列表的方法是什么?

转载 作者:行者123 更新时间:2023-11-29 12:20:59 24 4
gpt4 key购买 nike

我开始在我的 Rails 应用程序中构建模型,我想知道定义应限制为值列表的表列的各种方法是什么?

例如,clients 表的 title 列。如果我只想要 3 个值:

  • 先生
  • 夫人
  • 其他

实现这一目标的各种方法各有什么优缺点?

选项A

传统上,我遵循第三范式 (3NF) 并创建了一个 client_titles 表并使用关联,但这似乎有些过分,因为我不想为此创建模型表,因为它需要维护的代码比看起来必要的多。

  • 优点?
  • 缺点?

选项 B

在我的 clients 表中将字段保留为 text 并通过 app_settings 区域使用验证来限制它是否安全带有可接受值的散列值?

  • 优点?
  • 缺点?

其他

还有其他选择吗?

最佳答案

您可以使用 gem Frozen Record :

ActiveRecord-like interface for read only access to YAML static data.

并在 YML 文件中定义可用的标题。


或者您可以简单地在模型中设置一个常量,并验证标题属性是否包含在您定义的数组中:

class Client < ActiveRecord::Base

TITLES = %w( Mrs M Other ).freeze # same as TITLES = ['Mrs', 'M', 'Other']
validates :title, presence: true, inclusion: { in: TITLES }

您最终可以限制用户在表单中的 select 标签中只选择一个标题:

f.select :title, options_for_select(Client::TITLES)

因此除非最终用户实际修改发送的参数,否则它不会给出错误。

关于ruby-on-rails - 将模型属性限制为 Rails 中的值列表的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24619765/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com