为什么rails没有为我的“匹配”路由生成路由助手?

时间:2013-04-03 10:18:41

标签: ruby-on-rails ruby ruby-on-rails-3.2 routes

这是我在config / routes.rb文件中声明的两条路线:

  namespace :projects do
    match "proj_rapports_contributeur/select" => 'proj_rapports_contributeur#select', :via => :get
    match "proj_rapports_contributeur/generate/:id" => 'proj_rapports_contributeur#generate', :via => :get
  end

这是使用rake routes生成的路由和帮助程序:

projects_proj_rapports_contributeur_select_fr        /hierarchie/rapports_contributeur/selectionner(.:format)                                               projects/proj_rapports_contributeur#select {:locale=>"fr"}
projects_proj_rapports_contributeur_select_en        /en/projects/proj_rapports_contributeur/select(.:format)                                               projects/proj_rapports_contributeur#select {:locale=>"en"}

                                                     /hierarchie/rapports_contributeur/generer/:id(.:format)                                                projects/proj_rapports_contributeur#generate {:locale=>"fr"}
                                                     /en/projects/proj_rapports_contributeur/generate/:id(.:format)                                         projects/proj_rapports_contributeur#generate {:locale=>"en"}

我不明白为什么rails没有为第二条路线生成路由助手?

翻译路线不要感到惊讶。我正在使用gem'trail-translate-routes'来翻译路线(资源:https://github.com/francesc/rails-translate-routes


===最终答案更新===

根据回答者的说法,对于那些想要知道结束词的人来说,这里是我将要使用的路线:

  namespace :projects do

    get "proj_rapports_contributeur/select" => 'proj_rapports_contributeur#select'
    get "proj_rapports_contributeur/generate/:id" => 'proj_rapports_contributeur#generate', :as => 'proj_rapports_contributeur_generate'
  end

这些是由此产生的帮助者:

projects_proj_rapports_contributeur_select_fr GET    /hierarchie/proj_rapports_contributeur/selectionner(.:format)                                               projects/proj_rapports_contributeur#select {:locale=>"fr"}
projects_proj_rapports_contributeur_select_en GET    /en/projects/proj_rapports_contributeur/select(.:format)                                                    projects/proj_rapports_contributeur#select {:locale=>"en"}
projects_proj_rapports_contributeur_generate_fr GET    /hierarchie/proj_rapports_contributeur/generer/:id(.:format)                                                projects/proj_rapports_contributeur#generate {:locale=>"fr"}
projects_proj_rapports_contributeur_generate_en GET    /en/projects/proj_rapports_contributeur/generate/:id(.:format)                                              projects/proj_rapports_contributeur#generate {:locale=>"en"}

1 个答案:

答案 0 :(得分:7)

这是因为路由不是简单的路由,它包含一个参数(在您的情况下:id)。在这种情况下,您应使用as

手动指定路径名称
match "proj_rapports_contributeur/generate/:id" => 'proj_rapports_contributeur#generate', :via => :get, :as => "your_route_name"

作为旁注,请将match + via替换为相应的方法名称。

get "proj_rapports_contributeur/generate/:id" => 'proj_rapports_contributeur#generate'

它更短,并且在Rails 4中不推荐匹配。