Задать вопрос
@vadimstroganov

Как отрендерить метод со статусом?

Здравстуйте!
Есть метод call_404

render :json => Error::call_404, status: :not_found


Как сделать так, чтобы не писать все время status ?
status: :not_found

Хотелось бы что один раз это задать в методе call_404, чтобы каждый раз в контроллерах не прописывать status
Возможно ли такое?
  • Вопрос задан
  • 148 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 2
c3gdlk
@c3gdlk
Ментор в http://rubyboost.ru/
Мы обычно примерно так делаем. Добавляем методы в базовый контроллер

def respond_with_400(exception)
    render json: { success: false, all_errors: ['The user has not authorized application'] }, status: 400
  end

  def respond_with_404(exception=nil)
    render json: { success: false, all_errors: [t('errors.not_found')] }, status: 404
  end

  def respond_with_500(exception)
    render json: {success: false, all_errors: [t('errors.something_went_wrong')], debug: exception.to_s}, status: 500
  end

  def respond_with_success(resource=nil, status=200)
    result = {success: true}
    result.merge!(:"#{resource.class.name.underscore}" => {id: resource.id}) if resource.present?

    render json: result, status: status
  end

  def respond_with_errors(resource=nil, status=422, debug=nil)
    result = {success: false}

    result.merge!(errors: resource.errors.messages, all_errors: resource.errors.full_messages)  if resource.present?
    result.merge!(debug: debug) if debug.present?

    render json: result, status: status
  end
Ответ написан
Комментировать
@malroc
Сделайте обёртку над методом, которая будет возвращать сразу хэш с ключами :json и :status. Ну то есть что-то вот такое:
def call_404_wrapper
  { json: Error::call_404, status: :not_found }
end
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@CapeRatel
Нет ничего плохого писать статус. Наглядность в коде - это хорошо(не путать с "хардкодом").
Если прям очень надо, сделайте отдельные методы и в них укажите статус. А потом просто вызывайте нужный метод
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы