2011-09-28 50 views
1

我想使用OmniAuth,並根據瑞安貝茨,我應該在我的routes.rb文件中指定以下devise_for範圍覆蓋設計登記控制器:如何在我的路由文件中鏈接devise_for調用? - Rails的3.1

devise_for :users, :controllers => {:registrations => 'registrations'} 

然而,根據Devise's文檔,如果我定製path_names,所以不是做mydomain.com/users/sign_up/,我可以做mydomain.com/register,我會做這樣的事情:

devise_for :users, :path_names => { :sign_up => "register", :sign_in => "login", :sign_out => "logout", :settings => "settings", :newpass => "newpass", :changepass => "changepass" } 

我試圖鏈兩者是這樣的:

devise_for :users, :controllers => {:registrations => 'registrations'}, :path_names => { :sign_up => "register", :sign_in => "login", :sign_out => "logout", :settings => "settings", :newpass => "newpass", :changepass => "changepass" } 

但這不起作用。爲了讓我去看我的views/registrations/new.html.erb,我必須去mydomain.com/users/register。如果我去mydomain.com/register它仍然從/views/devise/registrations/new.html.erb服務它。

我該如何獲得mydomain.com/register指向/views/registrations/new.html.erb

謝謝。

回答

7

寫在你的路線文件,而不是添加:path_name

devise_scope :user do 
    get "register", :to => "devise/registrations#new" 
    get "login", :to => "devise/sessions#new" 
    get "logout", :to => "devise/sessions#destroy" 
end 

_edit2_ _

如果你想覆蓋控制器,那麼你需要從複製色器件控制器文件夾你的應用程序/控制器下的應用程序的寶石。在這種情況下,您還需要在routes.rb文件的下面寫入行。如果您不想覆蓋設計控制器的默認功能,則不需要在routes.rb文件的下面添加行。

devise_for :users, :controllers => { 
     :registrations => 'devise/registrations', 
     :sessions => 'devise/sessions', 
     :passwords => 'devise/passwords', 
     :confirmations => 'devise/confirmations', 
     :unlocks => 'devise/unlocks' 
    } 
+0

完善這個作品...我只是有一個問題,這是我的'routes.rb'現在的樣子:'devise_for:用戶:控制器=> {:註冊=> '註冊'}'' devise_scope:user do get「login」,:to =>「devise/sessions#new」 get「register」,:to =>「registrations#new」 \t \t get「settings」,:to =>「registrations #edit」 得到 「註銷」,:要=> 「設計/會話#消滅」 \t \t GET 「newpass」:以=> 「設計/密碼#新」 \t \t得到 「changepass」,\t:to =>「devise/passwords#edit」 end' – marcamillion

+0

鑑於我將'devise_for'中的所有請求發送到控制器'registrations',我必須爲那些不在'registrations'中的操作做任何不同的事情嗎? ?即'註銷,更換通行證,登錄等'? – marcamillion

+0

請參閱上面的編輯部分 –