我正在使用具有多个模型的Devise进行身份验证,管理员和用户。在用户注册时,我想重定向到个人资料页面。 (管理员是使用rake任务创建的,或通过管理员管理页面创建,而不是通过注册过程。)
我使用的是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方法,因为没有记录。
现在我已经做了一些狩猎,我似乎无法发现我的代码有任何问题。我想知道这是否是由于我使用的多模型模型。
任何人都可以对此有所了解吗?
如果您需要查看更多代码或其他信息,请询问。
答案 0 :(得分:3)
您无法在应用程序控制器中覆盖此方法。 你必须像这样覆盖设备的registrations_controller:
class RegistrationsController < Devise::RegistrationsController
protected
def after_sign_up_path_for(resource)
# your path
end
end
希望它会对你有所帮助。
答案 1 :(得分:3)
你应该读这个
它有足够的信息来满足您的需求。
答案 2 :(得分:1)
看看this。在开始工作之前,您需要做一些更改。
您还应该覆盖应用程序控制器中的方法Devise::Controllers::Helpers#stored_location_for
,以返回nil
。这也适用于after_sign_in_path_for
。
其次,方法after_sign_up_path_for
和after_inactive_sign_up_path_for
应该是私有的。
答案 3 :(得分:1)
我遇到了与John Judd类似的问题。阅读Rahul Singh善意指出的文档,我意识到我需要更新我的Devise::RegistrationsController
文件,因为设计不知道覆盖routes.rb
。
以下是我的devise_for :users
文件:
devise_for :users, controllers: { registrations: "registrations" }
我用它替换了它:
attributes
这解决了我的问题。