2011-09-26 61 views
1

我有一个下载文档的路由设置,我需要一个文档名称的命名参数,所以我得到下载文档的文档名称。我还传递了一些未命名的参数来识别文档。Rails 3.1路由错误,命名参数不起作用

是这样的:

match "download/:name", :to => 'documents#download', :as => "doc_download" 

我有我的链接的设置是这样的:

<%= link_to doc.pdf_name, doc_download_url(doc.pdf_name, 
    :prefix => doc.doc_prefix,:num => doc.doc_num, :change => doc.doc_change) %> 

当我运行页面,我得到以下错误:

No route matches {:controller=>"documents", :action=>"download", 
    :prefix=>"D", :num=>"002", :change=>0, :name=>"sdr_vor_000.pdf"} 

的奇怪的是路线显示在我的耙路线:

doc_download /download/:name(.:format) {:controller=>"documents", :action=>"dow 
    nload"} 

想法?

此外,如果我删除名称参数或使其可选,它的工作原理,但不会将名称粘贴到URL。它只是被添加到查询字符串。

回答

1

您的名称参数包含一个句点 - 默认情况下句点后的部分被解释为格式,而不是名称参数的一部分。要允许文件名中的句点,像这样修改你的路线(根据你的需要调整正则表达式):

match "download/:name", :to => 'documents#download', 
    :constraints => { :name => /[a-z0-9\.]+/i }, :as => "doc_download" 
+0

甜,作品。我也必须在正则表达式中加下划线。 /[a-z0-9_\.]+/i – joekarl