Есть ли лучший способ отменить текущий запрос и перенаправить на страницу ошибки в Rails? - PullRequest
0 голосов
/ 12 октября 2018

Часто, когда я имею дело с контроллерами, я обнаружил необходимость остановить текущее действие и затем показать страницу с ошибкой.В настоящее время у меня есть метод, чтобы показать мою страницу ошибки в контроллере приложения:

class ApplicationController < ActionController::Base

  def show_error msg
    render file: 'public/404.html', message: msg, layout: false
  end

end

А затем с другого контроллера я могу использовать его так:

class BikesController < ApplicationController 

  def inspect 
    @bike = Bikes.find(params[:id])
    show_error("You can't inspect a bike without wheels!") and return unless @bike.hasWheels?       
    @similar_bikes = Bikes.similar_to(@bike)
    render "inspect"
  end

end

Однако мне не нравится включатьand return вместе с моим show_error методом, чтобы гарантировать, что больше ничего не выполняется.Есть ли более чистый способ сделать это без использования return?

1 Ответ

0 голосов
/ 12 октября 2018

Rails-способ обработки подобных ситуаций - генерирование исключения и его обработка.

# app/controllers/application_controller.rb

class ApplicationController < ActionController::Base
  class NotFoundError < StandardError; end

  rescue_from NotFoundError do |e|
    render file: "#{RAILS_ROOT}/public/404.html", message: e.message, layout: false, status: :not_found
  end

  ...
end

raise NotFoundError, msg в любом действии ApplicationController или его дочернем элементе останавливает действие и отображает ваше 404.html файл, возвращающий ошибку HTTP 404.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...