Devise: 在Registrations Controller中覆盖create动作以使用Recaptcha

8 浏览
0 Comments

Devise: 在Registrations Controller中覆盖create动作以使用Recaptcha

我正在尝试覆盖Devise中的Registrations Controller的create方法,以包括Recaptcha验证(如这里这里所示):\n

class RegistrationsController < Devise::RegistrationsController
  def create
    if verify_recaptcha
      super
    else
      build_resource
      clean_up_passwords(resource)
      flash[:alert] = "Bad words."
      render_with_scope :new
    end
  end
end

\n我还相应地更改了routes.rb文件:\n

map.devise_for :users, :controllers => {:registrations => "registrations"}, :path_names => {
  :sign_up => 'signup',
  :sign_in => 'login',
  :sign_out => 'logout'
}

\n当尝试访问新的注册页面(具有新的路径名称:http://localhost:3000/users/signup)时出现以下错误:\n

LoadError in RegistrationsController#new
Expected /home/benoror/project/app/controllers/registrations_controller.rb to define RegistrationsController

\n完整错误跟踪\n感谢任何帮助。\n顺便说一句,我正在使用Devise 1.0.11和Rails 2.3.10,谢谢!

0
0 Comments

问题的原因是在使用Devise时,想要重写Registrations Controller的create动作,但是无法成功重写。根据之前的回答,如果Controller在Users模块中,需要使用"class Users::RegistrationsController"和"{:registrations => "users/registrations"}"来重写。但是根据其他回答,这种方法在Devise 1.0.11和Rails 2.3.10中无效。根据之前的回答,可能需要使用"rails g controller Users::Registrations"来生成自定义控制器。但是对于为什么需要这样做,回答者不了解Devise的具体情况。

解决方法是升级到Rails 3,因为根据之前的回答,自定义控制器在Devise 1.1之前是无效的。尽管升级可能需要花费很多时间,但是这似乎是唯一的解决方法。

问题的原因是在使用Devise时无法成功重写Registrations Controller的create动作,解决方法是升级到Rails 3。

0