无法自定义设计错误消息

时间:2014-02-19 19:57:15

标签: ruby-on-rails ruby-on-rails-4 devise registration user-registration

我正在使用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上看到它)。换句话说,建议的解决方案不能直接适用于手头的问题。

我在哪里可以找到有问题的错误消息?是否有一种干净的方法可以在我的自定义控制器中生成人类可读的错误消息数组?

1 个答案:

答案 0 :(得分:2)

哇 - RoR第一次引起了我的注意。什么是框架。我喜欢它!

因此,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

就是这样。