Rails (5.2.0) reCaptcha Devise (4.4.3) неопределенный метод users_url - PullRequest
0 голосов
/ 23 мая 2018

Произошла ошибка на тестах.Разработка и производство не показывают ошибок.

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'}

scope '(: 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, действителен.Что это такое?!?!

Ответы [ 4 ]

0 голосов
/ 16 июля 2018

Эта ошибка возникает, когда ресурс сам по себе действителен, но капча не прошла.Devise считает, что модель сохранена (но только проверена) и пытается перенаправить ее.

Решение состоит в том, чтобы заменить respond_with resource на render :new в методе check_captcha.

0 голосов
/ 04 июня 2018

также не работает без recaptcha, проверьте сначала разработайте документы, чтобы он работал автономно

0 голосов
/ 06 июня 2018

Я думаю, из-за ваших просмотров.

проверьте ваши взгляды "/devise/registrations/new.html.erb" и убедитесь, что вы поставили <%= recaptcha_tags %> на кнопку регистрации / devise / registrations/new.html.erb

А вот мои простые маршруты: rout.rb

0 голосов
/ 23 мая 2018

Теперь в обход этого

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
...