2010-08-15 5 views
3

je configurer l'authentification reposant et la gestion des utilisateurs sans pierres précieuses dans Rails 3.Alias ​​pour l'action de la route de ressources spécifiques («/de sign_in » au lieu de «/sessions/nouvelles »)

Cependant, je pense qu'il est stupide d'avoir besoin aller à "/ sessions/new" au lieu de "/ sign_in".

Je sais que vous pouvez créer un alias pour une ressource entière, de sorte qu'au lieu de «/sessions » -et-amis mes utilisateurs pourraient utiliser «/écureuils » -et-amis, mais c'est pas ce que je suis en train d'accomplir ici. Je veux alias une action spécifique.

Je sais que cela peut sorte de être accompli avec

resources :sessions, :path_names => { :new => "sign_in" } 

mais la route se termine comme «/sessions/sign_in » — et je ne veux pas le nom du contrôleur là-dedans du tout pour cette action. Je souhaiterais pouvoir le spécifier avec

resources :sessions, :path_names => { :new => "/sign_in" } 

où le signe «/» indique aux rails qu'il s'agit d'un nom de chemin complet. Mais cela a le même effet que le premier fragment de code.

Ma dernière tentative était d'utiliser le superficiel

match "sign_in" => "sessions#new" 

qui permet à quelqu'un d'entrer manuellement «/sign_in » dans la barre d'URL, mais les liens faits avec new_session_(path|url) encore utilisateurs des terres aux «/sessions plus difficiles /se connecter".

Répondre

5
match "sign_in" => "sessions#new", :as => :new_session 
+0

Ceci vous permet d'utiliser "new_session_path" et supprime "sign_in_path". C'est ce que je voulais faire à l'origine. Génial. – chadoh

1

Ajouter cette ligne:

map.sign_in '/sign_in', :controller => 'session', :action => 'new' 

Pour votre config/routes.rb.

+0

Cela ressemble beaucoup aux rails 2-ish. – chadoh

0

Le

match "sign_in" => "sessions#new" 
ligne

crée un itinéraire appelé "sign_in" que vous pouvez utiliser à la place de "new_session". Donc, partout où vous avez lié des choses avec "new_session_path", remplacez-le par "sign_in_path".

C'est assez bon. Ce que j'espérais faire à l'origine serait sympa, cependant - avoir un lien "new_session_path" vers la même chose que "sign_in_path". Pour pouvoir spécifier un nom de chemin qui n'inclut pas le contrôleur. Alors je n'aurais pas besoin de la ligne match du tout.

2

Pour les versions plus récentes de Rails, vous ne pouvez plus utiliser match. Au lieu de cela, utilisez le verbe http.

Exemple:

get "sign_in" => "sessions#new", :as => :new_session 

Notez que je l'ai utilisé get au lieu de correspondance.

Tested on Rails 4.0.0

0

Que diriez-vous de l'attribut "chemin"? Cela devrait faire ce que vous voulez.

devise_for :users, 
path: '', 
controllers: { 
    sessions: "user/sessions", 
    passwords: "user/passwords", 
    confirmations: "user/confirmations", 
    registrations: "user/registrations" 
}, 
path_names: { 
    sign_in: "login", 
    sign_out: "logout", 
} 
Questions connexes