设计未调用after_sign_up_path_for

时间:2014-02-05 07:56:05

标签: ruby-on-rails devise

我正在使用具有多个模型的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方法,因为没有记录。

现在我已经做了一些狩猎,我似乎无法发现我的代码有任何问题。我想知道这是否是由于我使用的多模型模型。

任何人都可以对此有所了解吗?

如果您需要查看更多代码或其他信息,请询问。

4 个答案:

答案 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_forafter_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

这解决了我的问题。