2011-10-26 45 views
2

参数错误在Rails应用程序,在routes.rb中的文件,我们正在路由一些旧的URL像这样:如何捕捉在routes.rb中

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

然而,问题是一些传统的URL具有非encodeable字符,如省略号,这打破了错误的gsub命令:

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

我的问题是:我如何赶上这个例外,并因此其他例外如我的routes.rb文件中的?我想这是不是具有“包罗万象”,在文件的结尾路由到一个404

回答

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

+0

如何重新格式化上面的整个get块?是的,它发生在gsub的块中。 –

+0

@Stephanie,查看更新后的答案。 –

+0

非常好!这正是我认为应该完成的事情。对此,我真的非常感激。 –