Ошибка маршрутизации Rails 3.1, Именованный параметр не работает - PullRequest
1 голос
/ 27 сентября 2011

У меня есть настройка маршрута для загрузки документа, для которого мне нужен именованный параметр для имени документа, чтобы я получил имя документа в документе загрузки. Я также передаю несколько неназванных параметров для идентификации документа.

выглядит так:

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 Ответ

1 голос
/ 27 сентября 2011

Ваш параметр имени содержит точку - по умолчанию часть после точки интерпретируется как формат, а не часть параметра имени.Чтобы разрешить точки в имени файла, измените ваш маршрут следующим образом (настройте регулярное выражение в соответствии с вашими потребностями):

match "download/:name", :to => 'documents#download', 
  :constraints => { :name => /[a-z0-9\.]+/i }, :as => "doc_download"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...