2

我在 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" 这样的 ruby​​ 语法错误情况,它会捕获错误,但是应用程序会崩溃。

如何使用“eval()”处理异常,以免破坏应用程序?为什么在这种情况下开始和救援不起作用?感谢对红宝石启蒙的任何帮助谢谢:)

4

2 回答 2

4

如果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-24T15:19:59.450 回答
1

这个的副本

但是你应该以这种方式救援

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

结尾

为了使它工作

于 2013-04-24T15:19:30.937 回答