2014-10-01 5 views
0

Когда кто-то обращается к моему API с чем-то отличным от целочисленного значения, он должен вернуть ошибку 400.Отобразить код состояния при возникновении ошибки

Мой minimalized метод индекс:

def index 
    @returnType = MyType.all 

    if params["limit"].present? 
     begin 
      limit = Integer(limit) 
     rescue Exception=>e 
      render status: :bad_request 
     end 
    end 

    respond_to do |format| 
     format.json 
    end 
end 

Но, за исключением случая-я получаю AbstractController::DoubleRenderError.

Проблема заключается в том, что Rails не останавливает метод на render, он продолжался с частью respond_to.

ответ

1

Вы должны render and return:

if params["limit"].present? 
    begin 
     limit = Integer(limit) 
    rescue Exception=>e 
     render status: :bad_request 
     return 
    end 
end 

Это сделает ошибку и затем прекратить выполнение метода.

+1

ПРИМЕЧАНИЕ. Вы должны быть осторожны с английскими операторами 'и' и 'or'. Прочитайте это: http://devblog.avdi.org/2014/08/26/how-to-use-rubys-english-andor-operators-without-going-nuts/ – Surya

+0

прояснил это @Surya, но я задаю вопрос, как смущая это в этой ситуации. – Undo

+0

Ваше решение хорошее, +1, но люди, которые новичок в экосистеме Ruby, узнают больше из ответов, размещенных на SO. Таким образом, '&&' и 'and' сильно путаются с их приложениями новичками, и, поскольку у вас был ответ, я не мог смириться с этим для других. :) – Surya

Смежные вопросы