【问题标题】:Enum validation in Rails 4.2 doesn't workRails 4.2 中的枚举验证不起作用
【发布时间】:2015-06-17 15:44:38
【问题描述】:

我的用户模型与此类似:

class User < ActiveRecord::Base
  enum type: [:admin, :reviewer, :super_admin ]
  validates :type, presence: true
  validates :type, inclusion: { in: User.types.keys }
end

当我提交枚举值之外的任何内容时,验证不会阻止代码运行,并且我收到 500 错误作为响应,并带有以下错误:

'something submitted' is not a valid type

如果我提交一个空白字段,则验证有效:

"type": [
    "can't be blank",
    "is not included in the list"
]

我做错了什么?我的代码看起来与this answer 相同

【问题讨论】:

    标签: ruby-on-rails validation enums


    【解决方案1】:

    Rails enum doesn't have in-built validation.

    AR 枚举当前的重点是将一组状态(标签)映射到一个 出于性能原因的整数。当前分配错误的状态是 被认为是应用程序级错误,而不是用户输入错误。 这就是您收到 ArgumentError 的原因。

    您仍然可以将nil 或空字符串设置为enum 属性而不会引发错误。

    【讨论】:

    • 谢谢。这种情况下的最佳实践是什么?有一个 user_types 表和一个 User.type_id 外键属性?
    • @Vasile 抱歉,但我不能给你最好的建议,我不知道你试图解决什么任务。给我一张全图=)
    • 我有三种类型的用户,管理员可以通过提交表单添加用户。将有一个用户类型的下拉菜单,但我只是想确保它也在服务器端得到验证。您无法验证一个值是否是数组的一部分,这似乎很奇怪。
    • 有一个 gem 可以在指定的枚举属性上添加一个验证器。这将在属性上添加活动模型错误消息,而不是引发错误。 github.com/CristiRazvi/enum_attributes_validation
    猜你喜欢
    • 2016-10-12
    • 2016-09-07
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    相关资源
    最近更新 更多