Dou*_*las 5 ruby routes ruby-on-rails ruby-on-rails-3.2
这是我在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
Run Code Online (Sandbox Code Playgroud)
这是生成的路由和帮助程序rails生成的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"}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么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
Run Code Online (Sandbox Code Playgroud)
这些是由此产生的帮助者:
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"}
Run Code Online (Sandbox Code Playgroud)
这是因为路由不是简单的路由,它包含一个参数(在您的情况下:id).在这种情况下,您应该手动指定路径名称as
match "proj_rapports_contributeur/generate/:id" => 'proj_rapports_contributeur#generate', :via => :get, :as => "your_route_name"
Run Code Online (Sandbox Code Playgroud)
作为旁注,请将match+ 替换via为相应的方法名称.
get "proj_rapports_contributeur/generate/:id" => 'proj_rapports_contributeur#generate'
Run Code Online (Sandbox Code Playgroud)
它更短,并且在Rails 4中不推荐匹配.