У меня есть приложение Rails, и я реализовал API, используя гем Grape. Теперь я создал собственный модуль форматирования ошибок (CSVFormatter), чтобы возвращать ответ об ошибке в формате CSV.
А также у меня есть это в файле v2.rb моего приложения:
error_formatter :csv, Api::Base::Errors::CSVFormatter
Когда я нажимаю на такой URL:
Он показывает такую ошибку в консоли, что хорошо и означает, что мой пользовательский форматировщик ошибок работает правильно:
Error
trim_start is invalid
trim_end is invalid
Но мне просто нужно загрузить это сообщение об ошибке в файле csv. Посмотрев документацию Grape, я нашел способ установить Content-type и попробовал это:
rack = Rack::Response.new(as_csv , 422, { "Content-type" => "text/csv" }).finish
rack[2].body[0]
Но это не работает, как я ожидал.
ИЗМЕНИТЬ:
Похоже, что нет чистого способа сделать это с помощью винограда без принудительного переопределения кода состояния в соответствии с ответом Саймона. Но это может быть нежелательно, так как это может привести к другим проблемам в приложении, например, если какая-то другая программа попытается прочитать данные из API и получит неверный ответ или что-то подобное, даже не зная почему.