我在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]”一切都很完美。 如果出现错误的ruby语法情况,例如params [:game] [:tier] =“[100,200] abc”它会捕获错误,但应用程序只是粉碎。
如何使用'eval()'来处理异常,以免破坏应用程序?为什么开始和救援在这种情况下不起作用?感谢任何对红宝石启蒙的帮助,谢谢:)
答案 0 :(得分: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
这也将解决救援问题,而不是解决您遇到的异常问题。
答案 1 :(得分: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
端
为了使其发挥作用