Ruby Grape: пользовательское сообщение об ошибке проверки

Как изменить сообщения об ошибках по умолчанию, выдаваемые Grape при ошибках проверки?

Например -

params do
    requires :email, allow_blank: false
end

Если я не передам :email в вызове API, виноград выдаст сообщение об ошибке как ['email is missing', 'email is empty'], но я хочу переопределить сообщение как ['Oops! Email is required.']

Итак, как я могу переопределить сообщения об ошибках по умолчанию для правил проверки Grape по умолчанию.


person Dwijen    schedule 17.02.2016    source источник
comment
попробуйте прочитать документацию по гему   -  person Ilya    schedule 17.02.2016
comment
Я несколько раз читал документы, но там ничего не говорится о пользовательских сообщениях об ошибках.   -  person Dwijen    schedule 17.02.2016


Ответы (2)


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

Обновлять:

Если вы хотите настроить полное сообщение, вы можете вручную отредактировать файл локали винограда и переопределить его в своем приложении.

локаль Grape en.yml

person Rubysmith    schedule 17.02.2016
comment
Я не хочу просто добавлять Oops перед сообщением, я хочу полностью изменить сообщение. - person Dwijen; 17.02.2016
comment
У Grape нет опции сообщения для передачи в блок параметров, чтобы переопределить сообщения проверки по умолчанию прямо сейчас. Я обновил ответ для вас. - person Rubysmith; 17.02.2016
comment
Я думаю, тогда я мог бы в конечном итоге сделать именно это. Спасибо. - person Dwijen; 17.02.2016

Кажется, что исходный ответ совершенно неверен:

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 проверки, но хочет получить одно сообщение. Возможно, обходной путь, описанный выше, сработает.

person Rich Steinmetz    schedule 23.11.2020