2013-04-03 2 views
5

Dies ist die beiden Routen ich in meiner config/routes.rb Datei deklariert:Warum rails erzeugt keinen Routenhelfer für meine "Match" Route?

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 

Das sind die resultierenden Routen und Helfer ist Schienen erzeugen mit 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"} 

Ich verstehe nicht, warum Rails hat keinen Routenhelfer für die zweite Route generiert?

Seien Sie nicht überrascht mit der übersetzten Route. Ich bin mit dem Edelstein 'Schienen-translate-Routen' Routen übersetzen (Resource: https://github.com/francesc/rails-translate-routes)


=== UPDATE für FINAL ANSWER ===

Nach dem answeer, für Gäste, die die End-Wort wissen, ist es hier die Routen ich verwenden werden:

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 

Und das sind die resultierenden Helfer:

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"} 

Antwort

7

Dies ist, weil die Route keine einfache Route ist, enthält es einen Parameter (in Ihrem Fall: ID). In diesem Fall sollten Sie die Routennamen as

match "proj_rapports_contributeur/generate/:id" => 'proj_rapports_contributeur#generate', :via => :get, :as => "your_route_name" 

Als Randbemerkung manuell angeben verwenden, ersetzen match + via mit dem entsprechenden Methodennamen.

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

Es ist kürzer, und Spiel in Rails ist veraltet 4.

+0

Dank! Es ist eine Schande, dass wir keine Informationen über "Get" oder Routenhelfer mit Routen finden können, die Parameter im offiziellen Dokument http://guides.rubyonrails.org/routing.html verwenden – Douglas