2014-02-05 14 views
2

我正在使用設計與多個模型進行身份驗證,管理員和用戶。在用戶註冊時,我想重定向到個人資料頁面。 (管理員使用rake任務創建,或通過admin Admin頁面創建,而不是通過註冊過程創建。)設計after_sign_up_path_for不被調用

我使用的是Ruby 2.0.0,Rails 4和Devise 3.1.0。

這是我用來做重定向的代碼,按照StackOverflow和Devise GitHub頁面上的幫助。

class ApplicationController < ActionController::Base 
    protect_from_forgery 
    before_filter :authenticate_user! 

    def after_sign_up_path_for(resource) 
     Rails.logger.info('ApplicationController: after_sign_up_path_for called') 
     '/profile' 
    end 

    def after_inactive_sign_up_path_for(resource) 
     Rails.logger.info('ApplicationController: after_inactive_sign_up_path_for called') 
     '/profile' 
    end 
end 

然而,當我通過註冊運行,看來,無論是after_sign_up或after_inactive_sign_up方法被調用,因爲沒有出現記錄。

現在我已經做了一些狩獵,我似乎無法找到我的代碼有任何問題。我想知道是否由於我使用的多模型模型。

任何人都可以對此有所瞭解嗎?

如果您需要查看更多的代碼或其他信息,請詢問。

回答

1

看看this。在開始工作之前,您需要做一些更改。

您還應該覆蓋應用程序控制器中的方法Devise::Controllers::Helpers#stored_location_for,以返回nil。這也適用於after_sign_in_path_for

其次,方法after_sign_up_path_forafter_inactive_sign_up_path_for應該是私有的。

+0

感謝您的幫助。一些事情雖然。我不知道如何將這個項目設置爲零? (因爲#stored_location ...解析爲註釋)。從鏈接看,這似乎是您註銷時沒有註冊的過程。 –

+0

我也添加了私人和保護。沒有快樂。 –

2

你不能在應用程序控制器中覆蓋此方法。 你必須重載色器件registrations_controller這樣的:

class RegistrationsController < Devise::RegistrationsController 

    protected 

    def after_sign_up_path_for(resource) 
    # your path 
    end 
end 

希望它會幫助你。

+0

謝謝Sunil,但是我嘗試改變RegistrationsController並且沒有運氣。另外,devise wiki指出這應該在ApplicationController中完成。仍然不確定爲什麼這不起作用。 –

1

我遇到了和約翰賈德一樣的類似問題。閱讀Rahul Singh友善地指出的文檔,我意識到我需要更新我的routes.rb文件,因爲設計不知道覆蓋Devise::RegistrationsController

這裏是我的routes.rb文件有什麼:

devise_for :users 

我這個替代它:

devise_for :users, controllers: { registrations: "registrations" } 

這解決了我的問題。