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