我有一个下载文档的路由设置,我需要一个文档名称的命名参数,所以我在下载文档中获得了doc名称。我还传递了一些未命名的参数来识别文档。
看起来像这样:
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"}
想法?
此外,如果我删除name参数或使其成为可选项,它可以工作,但不会将名称粘贴到URL中。它只是被添加到查询字符串中。
答案 0 :(得分:1)
您的name参数包含句点 - 默认情况下,句点后的部分被解释为格式,而不是name参数的一部分。要允许文件名中的句点,请像这样修改您的路线(根据您的需要调整正则表达式):
match "download/:name", :to => 'documents#download',
:constraints => { :name => /[a-z0-9\.]+/i }, :as => "doc_download"