2013-08-26 7 views
5

Hier ist meine RoutenWarum benennt Rails nur einige meiner Routen?

Datei
Dumb::Application.routes.draw do 

    # an auto-named route 
    get '/a/b',   to: 'a#b' 

    # apparently not auto-named??? 
    get '/a/z/:something', to: 'a#z' 

end 

Hier Ausgabe von rake routes

a_b GET /a/b(.:format)   a#b 
    GET /a/z/:something(.:format) a#z 

Wow, das saugt! Zumindest aus Gründen der Konsistenz. Wenn ich die a#z Route zu

get '/a/z/:something', to: 'a#z', as: "a_z" 

rake routes wird angezeigt Ok

a_b GET /a/b(.:format)   a#b 
a_z GET /a/z/:something(.:format) a#z 

ändern ist so gut, aber mit der Strecke zu nennen wie das ärgerlich.

Ist dies die einzige Lösung?

+0

Ich könnte falsch liegen, aber ich denke, die Routing-Tabelle vergibt nur Namen automatisch, wenn die Route einfach genug ist, um zu funktionieren. Das Hinzufügen von Parametern könnte es verwirren. – tadman

Antwort

2

Meine Vermutung ist, dass Schienen Ihre Route keinen Namen zuweisen kann, weil es es nicht versteht. Normalerweise werden Sie Ihre Route als solche schreiben:

/a/:id/b/:id # instead of /a/b/:id which Rails does not understand. 

Rails Karten a an einen Controller mit einer Modellinstanz mit der ID :id und b an einem anderen Controller mit einer anderen Modellinstanz mit der ID :id.

/a/b/:id bezieht sich auf nichts in Bezug auf Rails-Konvention.

Getting GET /a/b genannt zu a_b war nur ein Tipp Schienen gemacht, aber es kann nicht funktionieren GET /a/z/:something. Was würde es sein? a_z_something?