2017-06-04 1 views
0

In meiner Anwendung möchte ich Benutzer auf der öffentlichen Website (Subdomain: www) auf die Zielseite und Benutzer auf einer Subdomain zu ihrem Dashboard routen. So experimentierte ich mit verschiedenen Möglichkeiten, dies zu tun, und wenn ich das versucht:Warum können in routes.rb zwei Root-Pfade definiert werden?

root to: 'pages#landingpage', constraints: { subdomain: 'www' } 
root to: 'dashboard#index' 

Alles funktionierte gut, die ist nicht, was ich erwartet hatte. Da von dem, was ich verstehe root to: 'examplecontroller#index' erweitert, um get '/', to: 'examplecontroller#index', as: :root, und die Definition von zwei Routen mit dem gleichen Namen (as Option) sollte einen Fehler auslösen.

Warum passiert das nicht bei der Verwendung der root Methode, was fehlt mir?

Antwort

0

Ok, ich habe es herausgefunden. Normalerweise ist das Verhalten, das ich beschrieben habe, korrekt. Das heißt, wenn Sie eine benannte Route definieren zweimal wirft er einen Fehler:

 raise ArgumentError, "Invalid route name, already in use: '#{name}' \n" \ 
     "You may have defined two routes with the same name using the `:as` option, or " \ 
     "you may be overriding a route already defined by a resource with the same naming. " \ 
     "For the latter, you can restrict the routes created with `resources` as explained here: \n" \ 
     "http://guides.rubyonrails.org/routing.html#restricting-the-routes-created" 

Allerdings hat es offenbar einige gewesen discussion darüber, ob dieses Verhalten auf Wurzelwege gelten und ein Verfahren wurde hinzugefügt mehrere Stamm Erklärungen zu verhindern, defining routes with the same name:

def match_root_route(options) 
    name = has_named_route?(name_for_action(:root, nil)) ? nil : :root 
    args = ["/", { as: name, via: :get }.merge!(options)] 

    match(*args) 
end 
Verwandte Themen