6

这是我在 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 'rails-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"}
4

1 回答 1

8

这是因为该路线不是简单的路线,它包含一个参数(在您的情况下为: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 中不推荐使用 match。

于 2013-04-03T10:23:41.977 回答