[英]Begin and Rescue block exception handling
我在Rails異常處理方面經驗很少。 我有這個片段
def update
@game = Game.find(params[:id])
begin
params[:game][:tier] = eval(params[:game][:tier])
rescue
@game.errors.add(:tier, "Please make sure the correct format for tier, example [100, 1000, 10000]")
end
#.... more code
end
萬一params [:game] [:tier] =“ [100,200]”一切就完美了。 如果發生紅寶石語法錯誤,例如params [:game] [:tier] =“ [100,200] abc”,它會捕獲錯誤,但是應用程序會崩潰。
我該如何使用'eval()'處理異常,以免破壞應用程序? 為什么在這種情況下開始而救援不起作用? 感謝任何對紅寶石啟發的幫助,謝謝:)
如果params[:game][:tier]
是"[100,200]; system('rm -rf /')"
怎么辦?
由於預期傳入數據是一個數組,因此我不使用eval
而是JSON.parse
:
> JSON.parse("[100,200]")
=> [100, 200]
> JSON.parse("[100,200] abc")
JSON::ParserError: 746: unexpected token at 'abc'...
然后僅從JSON::ParserError
異常進行救援
rescue JSON::ParserError => e
這也將解決無法捕獲您遇到的異常問題的情況。
重復的這
但是你應該這樣拯救
def update
@game = Game.find(params[:id])
begin
params[:game][:tier] = eval(params[:game][:tier])
rescue Exception => e
@game.errors.add(:tier, "Please make sure the correct format for tier, example [100, 1000, 10000]")
end
#.... more code
結束
為了使它起作用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.