2011-10-26 80 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

非常好!這正是我認爲應該完成的事情。對此,我真的非常感激。 –