2010-08-15 45 views
3

我成立了寧靜認證和用戶管理沒有用Rails 3別名爲特定足智多謀路由的行動(「/ sign_in」,而不是「/會話/新」)

但是任何寶石,我認爲這是愚蠢的需要轉到「/ sessions/new」而不是「/ sign_in」。

我知道你可以別名整個資源,所以,而不是「/ sessions」和朋友我的用戶可以使用「/松鼠」和朋友,但這是而不是我想要完成的這裏。我想要別名一個特定的操作。

我知道這可以種

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

來完成,但隨後的路徑爲「/會話/ sign_in」 —結束了,我不想控制器名稱在那裏所有這個動作。我希望我可以指定這與

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

其中「/」告訴軌道,它是一個完整的路徑名稱。但是,這與第一個代碼片段具有相同的效果。

我最後的嘗試只是使用淺

match "sign_in" => "sessions#new" 

它允許某人在網址欄中手工輸入「/ sign_in」,但new_session_(path|url)取得聯繫仍處於比較尷尬「/會話土地使用權/簽到」。

回答

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

這可讓您使用「new_session_path」並擺脫「sign_in_path」。這是我最初想要做的。 太棒了。 – chadoh 2010-08-22 12:47:49

1

加入這一行:

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

要將config/routes.rb

+0

這看起來非常鐵路2-ish。 – chadoh 2010-08-16 18:32:42

0

match "sign_in" => "sessions#new" 

行創建了一個名爲 「sign_in」,它可以代替 「new_session」 使用的路線。因此,無論您使用「new_session_path」鏈接到什麼地方,都應將其替換爲「sign_in_path」。

這很好。然而,我原本希望做的事情會很好 - 讓「new_session_path」鏈接與「sign_in_path」相同。要能夠指定不包含其中的控制器的path_name。然後我根本不需要match行。

2

對於較新版本的Rails,您不能再使用匹配。而是使用http動詞。

例子:

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

請注意,我用get,而不是比賽。

測試Rails 4.0.0

0

「路徑」屬性如何?這應該做你想做的。

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", 
} 
相關問題