【问题标题】:Can't override Devise::RegistrationsController in Rails?不能在 Rails 中覆盖 Devise::RegistrationsController?
【发布时间】:2020-08-12 15:37:20
【问题描述】:

我正在尝试在用户登录并注册后设置默认行为。

我尝试使用以下代码创建 registration_controller.rb

class RegistrationsController < Devise::RegistrationsController

  protected


  def after_sign_up_path_for(resource)
    "/projects"
  end

  def after_sign_in_path_for(resource)
    raise
    "/projects"
  end

end

这甚至没有让我参加加薪

作为一种解决方法,我设法让它在 application_controller.rb 中创建一个方法,如下所示:

  def after_sign_in_path_for(resource)
    "/projects"
  end

但我想知道为什么我没有覆盖默认的 RegistrationsController 类。

【问题讨论】:

  • 如果将super 添加到RegistrationController 的顶部,就在class RegistrationsController &lt; Devise::RegistrationsController 正下方,是否有效?

标签: ruby-on-rails ruby path devise registration


【解决方案1】:

根据设计文档,您可以通过运行rails generate devise:controllers [scope] 来自定义其配置,例如将范围替换为users

然后它会生成这样的文件:

class Users::RegistrationsController < Devise::RegistrationsController
  # GET /resource/sign_in
  # def new
  #   super
  # end
  ...
end

您可以取消注释您需要的方法并在super之后编写您的代码。

【讨论】:

  • 谢谢!我实际上是手动创建了控制器,而不是通过运行控制台命令。我也没有为被覆盖的控制器添加自定义路由。
猜你喜欢
  • 2011-10-02
  • 1970-01-01
  • 2013-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多