2015-06-17 47 views
1

我的用户模型看起来与此类似:枚举验证不起作用

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

回答

1

Rails enum doesn't have in-built validation.

The current focus of AR enums is to map a set of states (labels) to an integer for performance reasons. Currently assigning a wrong state is considered an application level error and not a user input error. That's why you get an ArgumentError.

您仍然可以设置nil或空字符串到enum属性而不产生错误。

+0

谢谢。什么会被视为这种情况下的最佳做法?有一个user_types表和一个User.type_id外键属性? – Sebastian

+0

@Vasile对不起,但我不能'给你**最好的建议**,我不知道你试图解决什么任务。给我一个完整的图片=) –

+0

我有三种类型的用户,管理员可以通过提交表单添加用户。用户类型会有一个下拉菜单,但我只是想确认它在服务器端的验证。看起来很奇怪,你不能验证一个值是数组的一部分。 – Sebastian