2016-05-05 9 views
2

Ich erstelle eine benutzerdefinierte Route wie:Erstellen von benutzerdefinierten Routen in Schienen

namespace :admin do 
    root 'users#index' 
    resources :users do 
    get 'admin_login' => 'users#admin_login' 
    end 
end 

Aber wenn ich mit rake routes sehen:

admin_user_admin_login GET /admin/users/:user_id/admin_login(.:format)   admin/users#admin_login 

Warum : User_ID wird hier hinzugefügt? Ich will es nur ohne :user_id.

+0

können Sie einfach hinzufügen 'get 'admin_login' => 'Benutzer # admin_login', auf: collection' –

Antwort

4

Da Sie eine benutzerdefinierte Route innerhalb der Benutzerressource erstellen. Rails macht genau das, was Sie ihm sagen. Sie möchten die Route "admin_login" für einen bestimmten Benutzer anzeigen (das ist es, was Sie derzeit railing sagen).

Bewegen Sie den:

get 'admin_login' => 'users#admin_login' 

Codezeile außerhalb des Ressourcen-Block und Sie werden in der Lage sein, um die Route zu erstellen.

2

Sie müssen eine on Option angeben, um Rails mitzuteilen, dass es für eine Sammlung und nicht für eine Mitgliedsressource funktioniert. Nach den official Rails routing guide

können Sie auslassen die: auf Option, wird dies die gleiche Mitglied Route erstellen, außer, dass der Wert Ressource-ID wird in params verfügbar sein [: photo_id] anstelle von params [: id] .

Sie können auch den => 'users#admin_login' Teil entfernen, da dies das Standardverhalten ist.

So ist die Lösung für Ihr Problem ist on: :collection hinzuzufügen, oder es in einem Block zu platzieren wie

namespace :admin do 
    root 'users#index' 

    resources :users do 
    collection do 
     get 'admin_login' 
    end 
    end 
end