【问题标题】:Ruby Grape: Custom validation error messageRuby Grape:自定义验证错误消息
【发布时间】:2016-02-17 11:06:40
【问题描述】:

如何更改 Grape on Validation Errors 给出的默认错误消息?

例如 -

params do
    requires :email, allow_blank: false
end

如果我没有在 API 调用中传递:email,grape 将给出错误消息['email is missing', 'email is empty'],但我想将消息覆盖为['Oops! Email is required.']

那么,如何覆盖 Grape 默认验证规则的默认错误消息。

【问题讨论】:

  • 尝试阅读 gem 文档
  • 我已经阅读了几次文档,但它没有说明自定义错误消息。

标签: ruby ruby-on-rails-4 grape-api


【解决方案1】:
format :json
subject.rescue_from Grape::Exceptions::ValidationErrors do |e|
  error!({ messages: e.full_messages.map { |msg| "Oops!" + msg }}, 400)
end

更新:

如果您想自定义完整的消息,您可以手动编辑葡萄语言环境文件并在您的应用程序中覆盖它。

Grape locale en.yml

【讨论】:

  • 我不想只是在消息前添加“Oops”,我想彻底改变消息。
  • Grape 目前没有消息选项可以传递给 params 块来覆盖默认的验证消息。我已经为你更新了答案。
  • 我想我最终可能会这样做。谢谢。
【解决方案2】:

看来原来的答案是完全错误的:

https://github.com/ruby-grape/grape#custom-validation-messages

对于 OP 的例子来说,这应该是这样的:

params do
    requires :email, allow_blank: { false, message: '' }, message 'Oops! Email is required.'
end

棘手的部分是 OP 违反了 2 个验证但想要一条消息。不过,也许上面的解决方法会起作用。

【讨论】:

  • 当我提供原始答案时,此功能在 Grape 上不可用。您展示或指出的上述自定义验证功能当然是由我实现的,以克服 Grape API 中的这个缺点。
  • 看看这个拉取请求github.com/ruby-grape/grape/pull/1295
  • @Rubysmith 抱歉,写我的答案时可能没有考虑时间安排。感谢您的工作!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-18
  • 2016-12-04
  • 1970-01-01
  • 1970-01-01
  • 2013-04-08
  • 2011-10-12
  • 1970-01-01
相关资源
最近更新 更多