Например, введите: localhost:3000/absurd-non-existing-route
Как сделать так, чтобы неверные маршруты указывали на главную страницу приложения в Rails?
Перенаправить все ошибки маршрутизации на корневой URL-адрес приложения
Ответы (5)
Используйте rescue_from в своем ApplicationController
, чтобы спасти ActionController::RoutingError
и перенаправить на домашнюю страницу. когда это произойдет.
В настоящее время это не будет работать в Rails 3. Билет отправлен.
Представленное здесь решение работает очень хорошо
#Last route in routes.rb
match '*a', :to => 'errors#routing'
# errors_controller.rb
class ErrorsController < ApplicationController
def routing
render_404
end
end
На Rails 4+
Отредактируйте файл routes.rb
, добавив строку get "*path", to: redirect('/')
чуть выше последней end
, как указано пользователем @ Rails: перенаправить все неизвестные маршруты на root_url
Если вы используете rails 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
Вот что я придумал, пытаясь найти универсальное универсальное решение для маршрутизации исключений. Он обрабатывает самые популярные типы контента.
маршруты.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
.