如何捕获routes.rb中的Argument Error

时间:2011-10-26 16:35:23

标签: ruby ruby-on-rails-3 encoding routes

在RAils应用程序的routes.rb文件中,我们正在路由一些遗留URL,如下所示:

get "downloads/item/:slug", :to => redirect {|params| "/downloads/#{params[:slug].gsub('.', '')}"}, :constraints => { :slug => /[^\/]+/ }

然而,问题是这些遗留URL中的一些具有不可编码的字符,例如省略号,它会使gsub命令中断错误:

NilClass#(ArgumentError)“UTF-8中的无效字节序列”

我的问题是:如何在我的routes.rb文件中捕获此异常,以及其他异常?我认为这不同于在文件末尾使用“catch-all”来路由到404。

1 个答案:

答案 0 :(得分:2)

如果块内发生错误,您可以使用begin..rescue

get "downloads/item/:slug", :to => redirect {|params|
  begin
    "/downloads/#{params[:slug].gsub('.', '')}"
  rescue ArgumentError
    "/"
  end
}, :constraints => { :slug => /[^\/]+/ }

了解详情:http://ruby-doc.org/docs/ProgrammingRuby/html/tut_exceptions.html