Rails 3.1路由错误,命名参数不起作用

时间:2011-09-26 22:42:30

标签: ruby-on-rails-3.1

我有一个下载文档的路由设置,我需要一个文档名称的命名参数,所以我在下载文档中获得了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中。它只是被添加到查询字符串中。

1 个答案:

答案 0 :(得分:1)

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

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