ruby - 如何在 routes.rb 中捕获参数错误

标签 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 文件中捕捉到这个异常,以及其他类似的异常?我认为这与在文件末尾使用“包罗万象”以路由到 404 不同。

最佳答案

如果错误发生在 block 内,您可以使用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

关于ruby - 如何在 routes.rb 中捕获参数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7905851/

相关文章:

PHP ionCube 编码器文件不起作用

ruby - Nokogiri to_xml 没有回车

ruby-on-rails - 获取多个对象关联的数组

ruby-on-rails - 是否可以将 'activerecord-import' gem 用于 Rails 中的无模型表?

ruby-on-rails - 如何生成传递一些自定义参数的 `link_to` URL?

encoding - 如何用字符串更新 libc::c_char 数组?

ruby - 从 SQL Server 2008 解析 CSV 的语义正确方法是什么?

ruby - 用 Ruby 编写一个简单的网络服务器

ruby-on-rails-3 - 如何让 Netflix OAuth API 使用我的回调?

ios - 指定的样本格式 s16 无效或不受支持