关于rails上的ruby:开始和救援块异常处理

Begin and Rescue block exception handling

我在rails异常处理方面经验不足。 我有这个片段

1
2
3
4
5
6
7
8
9
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]"一切都很完美。
如果出现错误情况的ruby语法如params [:game] [:tier] ="[100,200] abc"它会捕获错误,但应用程序只是粉碎。

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


如果params[:game][:tier] "[100,200]; system('rm -rf /')"怎么办?

由于传入的数据应该是一个数组,我不会使用eval而是JSON.parse

1
2
3
4
> JSON.parse("[100,200]")
 => [100, 200]
> JSON.parse("[100,200] abc")
JSON::ParserError: 746: unexpected token at 'abc'...

然后只从JSON::ParserError例外救援

1
rescue JSON::ParserError => e

这也将解决救援问题,而不是解决您遇到的异常问题。


这是重复的

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

1
2
3
4
5
6
7
8
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

结束

为了使它工作