Нужен куратор. Передайте аргумент with: keyword или предоставьте блок

Недавно я обновил свое приложение с Ruby версии 2.6.1 до 3.0.1 и использую rbenv в качестве диспетчера версий.

но когда я пытаюсь запустить сервер рельсов, у меня возникает ошибка

      => Booting Puma
=> Rails 6.1.3 application starting in development 
=> Run `bin/rails server --help` for more startup options
Exiting
/home/humayun/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/activesupport-6.1.3/lib/active_support/rescuable.rb:56:in `rescue_from': Need a handler. Pass the with: keyword argument or provide a block. (ArgumentError)
    from /home/humayun/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/will_paginate-3.1.8/lib/will_paginate/railtie.rb:67:in `rescue_from'
    from /home/humayun/umerfarooq/Alchemy/app/controllers/application_controller.rb:2:in `<class:ApplicationController>'
    from /home/humayun/umerfarooq/Alchemy/app/controllers/application_controller.rb:1:in `<main>'

Я только что прочитал здесь о функции, вызывающей ошибку в строке 56.

appciation_controller.rb

       rescue_from Exception, with: :handle_exception
 protect_from_forgery prepend: true, with: :exception
 before_action :configure_permitted_parameters, if: :devise_controller?
 before_action :initialize_api

  def not_found
    raise ActionController::RoutingError.new('Not Found')
  end

 def handle_exception(exception = nil)
    return render_404 if [ActionController::RoutingError, ActiveRecord::RecordNotFound].include?(exception.class)
     render_500
 end

Думаю, это из-за амортизации.

может кто-нибудь сказать мне, как обрабатывать эти ошибки?

2 ответа

ваш handle_exception вероятно, понадобится блок, который отображает представление или возвращает статус

как указано в ошибке в app/controllers/application_controller.rb:2 у вас, вероятно, есть без ошибки или обработчик, вам нужно следовать любому из приведенных ниже синтаксисов

      class ApplicationController < ActionController::Base
  rescue_from User::NotAuthorized, with: :deny_access # self defined exception
  rescue_from ActiveRecord::RecordInvalid, with: :show_errors

  rescue_from 'MyAppError::Base' do |exception|
    render xml: exception, status: 500
  end

  private
    def deny_access
      ...
    end

    def show_errors(exception)
      exception.record.new_record? ? ...
    end
end

согласно документации здесь https://apidock.com/rails/ActiveSupport/Rescuable/ClassMethods/rescue_from

------- Обновление :

Это связано с тем, что используемый вами драгоценный камень переопределяет rescue_from в вашем контроллере вместе с новыми обновлениями рубина, которые изменяют поведение вокруг атрибута ключевого слова

если ваш базовый контроллер include ControllerRescuePatchвы можете удалить его, и это исправит, но вы не уверены, что произойдет с вашей разбивкой на страницы. В противном случае отложите обновление рубина до тех пор, пока will_paginate обновите свой код, чтобы исправить это

Я просто пытаюсь использовать последнюю версию драгоценного камня will_paginate , и у меня это работает.

      gem 'will_paginate', '~> 4.0'
Другие вопросы по тегам