【问题标题】:Rails (5.2.0) reCaptcha Devise (4.4.3) undefined method users_urlRails (5.2.0) reCaptcha Devise (4.4.3) 未定义方法 users_url
【发布时间】:2018-05-22 21:40:19
【问题描述】:

测试出错。开发和生产都没有错误。

Error:
UsersTest#test_creating_a_user:
NoMethodError: undefined method `users_url' for #<RegistrationsController:0x00007fd3e69d1a18>
Did you mean?  user_session_url
Did you mean?  user_session_url
    app/controllers/registrations_controller.rb:11:in `check_captcha'

有一个设计注册控制器:

class RegistrationsController < Devise::RegistrationsController
   prepend_before_action :check_captcha, only: [:create]

   private

def check_captcha
  unless verify_recaptcha
    self.resource = resource_class.new sign_up_params
    resource.validate # Look for any other validation errors besides Recaptcha
    set_minimum_password_length
    respond_with resource
    # self.resource = resource_class.new sign_up_params
    # respond_with_navigational(resource) { render :new }
  end 
end

def after_inactive_sign_up_path_for resource
  new_user_session_path
end
end

路由

Rails.application.routes.draw do
  devise_for :users, only: :omniauth_callbacks, controllers: {omniauth_callbacks: 'omniauth_callbacks'}

范围 '(:locale)', :locale => /en|ru/ do

root :to => 'index#index'

devise_for :users, :controllers => {
                    :registrations => 'registrations',
                    :invitations => 'invitations'
                   },
                   :path => 'auth',
                   :path_names => {
                     :sign_in => 'login',
                     :sign_out => 'logout',
                     :password => 'secret',
                     :confirmation => 'verification',
                     :unlock => 'unblock',
                     :registration => 'register',
                     :sign_up => 'cmon_let_me_in'
                   }, 
                   skip: :omniauth_callbacks

   end

传递给respond_with resource 的资源有效。 那是什么?!?!

【问题讨论】:

    标签: ruby-on-rails devise ruby-on-rails-5 recaptcha


    【解决方案1】:

    我认为是因为你的观点。

    查看您的意见“/devise/registrations/new.html.erb”并确保将&lt;%= recaptcha_tags %&gt; 放在注册按钮/devise/registrations/new.html.erb

    这是我的简单路线: routes.rb

    【讨论】:

      【解决方案2】:

      当资源本身有效但验证码未通过时会发生此错误。 Devise 认为该模型是持久的(但它仅经过验证)并尝试重定向到它。

      解决方法是将check_captcha方法中的respond_with resource替换为render :new

      【讨论】:

        【解决方案3】:

        现在就这样绕过它

        def check_captcha
          return true if Rails.env.test?
          unless verify_recaptcha
            self.resource = resource_class.new sign_up_params
            resource.validate # Look for any other validation errors besides Recaptcha
            set_minimum_password_length
            respond_with resource
          end
        end
        

        【讨论】:

          【解决方案4】:

          如果没有 recaptcha 也无法工作,请先检查设计文档以使其独立工作

          【讨论】:

          • 它是用官方文档示例编写的。现在我看到方法 verify_recaptcha 返回称为 test:system 的不同值,就像独立模式的测试一样,看起来最近修复了一些 rails trobles 而没有发布
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-17
          • 1970-01-01
          相关资源
          最近更新 更多