我在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 = "100,200“,一切都很完美。如果出现像params:game =“100,200abc”这样的ruby语法错误,它会捕获错误,但是应用程序会崩溃。
我如何处理'eval()‘的异常,这样它就不会破坏应用程序了?为什么开始和救援在这种情况下不起作用?感谢大家对ruby启蒙的帮助,谢谢:)
发布于 2013-04-24 23:19:59
如果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这也将解决没有捕捉到你所遇到的异常问题的救援。
发布于 2013-04-24 23:19:31
this的副本
然而,你应该用这种方式来拯救
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结束
为了让它工作
https://stackoverflow.com/questions/16195663
复制相似问题