Перенаправить все ошибки маршрутизации в корневой URL-адрес приложения - PullRequest
8 голосов
/ 07 июня 2010

Например, набрав: localhost:3000/absurd-non-existing-route Как получить недопустимые маршруты, указывающие на главную страницу приложения в Rails?

Ответы [ 5 ]

6 голосов
/ 18 мая 2011

Представленное здесь решение работает довольно хорошо

#Last route in routes.rb
match '*a', :to => 'errors#routing'

# errors_controller.rb
class ErrorsController < ApplicationController
  def routing
    render_404
  end
end
6 голосов
/ 18 августа 2014

Вкл Рельсы 4 +

Отредактируйте файл routes.rb, добавив строку get "*path", to: redirect('/') чуть выше последней end, как указано пользователем @ Rails: перенаправьте все неизвестные маршруты в root_url

3 голосов
/ 07 июня 2010

Используйте rescue_from в вашем ApplicationController для спасения ActionController::RoutingError и перенаправления на домашнюю страницу, когда это происходит.

Это не будет работать в Rails 3 в настоящее время. Билет подан.

1 голос
/ 19 апреля 2017

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

routes.rb

get '*unmatched_route', to: 'errors#show', code: 404

ErrorsController

class ErrorsController < ApplicationController
  layout false

  # skipping CSRF protection is required here to be able to handle requests for js files
  skip_before_action :verify_authenticity_token

  respond_to :html, :js, :css, :json, :text

  def show
    respond_to do |format|
      format.html { render code.to_s, status: code }
      format.js   { head code }
      format.css  { head code }
      format.json { render json: Hash[error: code.to_s], status: code }
      format.text { render text: "Error: #{ code }", status: code }
    end
  end

  private

  def code
    params[:code]
  end
end

ErrorsController разработан, чтобы быть более универсальным, для обработки всех видов ошибок.

Рекомендуется создать собственное представление для ошибки 404 в app/views/errors/404.html.

1 голос
/ 17 февраля 2016

Если вы используете рельсы 3 ,

Используйте следующее решение

В вашем routes.rb добавьте следующую строку в конец файла

match "* path" => "controller_name # action_name" через: [: get,: post]


И в вашем контроллере добавьте

def action_name
  redirect_to root_path
end

Если вы используете рельсы 4

Напишите эту строку в вашем routes.rb

match '*path' => redirect('/'), via: :get
...