Если вы можете отлаживать, вам нужно добавить точку останова здесь:
unless Rails.application.config.consider_all_requests_local
rescue_from Exception, with: lambda { |exception|
if exception.class == CanCan::AccessDenied
redirect_to root_path, notice: exception.to_s
else
Airbrake.notify(exception); render_error 500, exception
end
}
rescue_from ActionController::RoutingError, ActionController::UnknownController, ::AbstractController::ActionNotFound, ActiveRecord::RecordNotFound, with: lambda { |exception| Airbrake.notify(exception); render_error 404, exception }
end
Я думаю, что действие create не авторизовано для пользователя, поэтому оно пытается перенаправить на root_path
, но root_path
(индекс) не определен, поэтому вы 1) достигли кода redirect_to root_path, notice: exception.to_s
, но по второму запросу 2) достигли этого кода: rescue_from ActionController::RoutingError, ActionController::UnknownController, ::AbstractController::ActionNotFound, ActiveRecord::RecordNotFound, with: lambda { |exception| Airbrake.notify(exception); render_error 404, exception }
Это может быть связано с областью действия: root_path на одном контроллере может быть действительным, потому что индекс определен, но на другом он не определен. Я бы сказал, проверьте ваши другие контроллеры, например, действия с индексами, чтобы увидеть, как они справляются с этим.
Дайте мне знать, что вы найдете:)