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

标签 ruby-on-rails postgresql validation model attributes

我开始在 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/

相关文章:

ruby-on-rails - 如何在 Rails 应用程序中使用 Capybara 测试多选选择框?

javascript - Angular ng-repeat 输入验证

jquery - 将 jQuery 条件验证添加到动态生成的 HTML

validation - 自定义 ASP.NET Core MVC 验证响应

ruby-on-rails - 在 Rails 中呈现 Action 时不显示警报

ruby-on-rails - 如何从自定义路由器登录 Clearance 中的用户?

ruby-on-rails - 数据库唯一性约束不会阻止通过关联创建重复记录

postgresql - 简单的 postgres 函数

sql - 在 PostgreSQL 中执行这个小时的操作查询

ruby-on-rails - 使用 AWS Elasticache 在 Rails 应用程序中运行 Sidekiq