我正在使用Devise 3.2.2,我想根据建议here自定义我的自定义设备注册控制器的错误消息。传入已使用的电子邮件地址时,(自定义)控制器代码
if user.save
render :json => user.as_json, :status => 201
else
warden.custom_failure!
render :json => user.errors, :status => 422
end
生成以下json
{"email":["has already been taken"]}
我想阅读此错误消息
{"messages": ["The email address has already been taken."]}
不幸的是,我在config / locales / en.yml文件中找不到字符串“已经被占用”(我也没有在GitHub上看到它)。换句话说,建议的解决方案不能直接适用于手头的问题。
我在哪里可以找到有问题的错误消息?是否有一种干净的方法可以在我的自定义控制器中生成人类可读的错误消息数组?
答案 0 :(得分:2)
因此,user.errors
只是一个ActiveModel::Errors
对象。据我所知,有些错误是在Devise gem中的语言环境中指定的。其他,如索引字段的唯一性等(如电子邮件字段),由ActiveModel验证提供。这就是我无法在gem语言环境中找到给定错误的原因。
现在; ActiveModel::Errors
documentation有一些非常有意思的话。它说有一个名为full_messages()
的方法“返回数组中的所有完整错误消息”。我的控制器现在看起来像这样:
if user.save
render :json => user.as_json, :status => 201
else
warden.custom_failure!
render :json => { :messages => player.errors.full_messages }, :status => 422
end
就是这样。