Devise: 在Registrations Controller中覆盖create动作以使用Recaptcha
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,谢谢!
问题的原因是在使用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。