2014-10-01 44 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

注意:您應該小心使用英文'和'和'或'運算符。閱讀此:http://devblog.avdi.org/2014/08/26/how-to-use-rubys-english-andor-operators-without-going-nuts/ – Surya 2014-10-01 19:12:04

+0

澄清它@Surya,但我質疑如何令人困惑的是在這種情況下。 – Undo 2014-10-01 19:13:41

+0

您的解決方案很好,+1,但對Ruby生態系統不熟悉的人會從SO上發佈的答案中學到更多。因此,'&&'和'和'與初學者的應用程序有很大的混淆,因爲你的答案已經有了,所以我忍不住要爲其他人記下這些。 :) – Surya 2014-10-01 19:19:55