Блог Ruby-разработчика

Использование `redirect_to :back` в Rails 5

| Comments

В Rails 4.x для возврата на предыдущую страницу, использовался метод redirect_to :back. Иногда, при использовании данного метода в контроллере, мы могли получать ошибку ActionController::RedirectBackError, это случалось тогда, когда не был установлен HTTP_REFERER в заголовках запроса.

Рассмотрим пример, в котором обработаем ошибку ActionController::RedirectBackError и заставим наше приложение редиректить на root_url в случае отсутствия заголовка HTTP_REFERER:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class PostsController < ApplicationController

  rescue_from ActionController::RedirectBackError, with: :redirect_to_default

  def publish
    post = Post.find params[:id]
    post.publish!
    redirect_to :back
  end

  private

  def redirect_to_default
    redirect_to root_path
  end

end

В случае возникновения ошибки, сработает приватный метод redirect_to_default, который отредиректит на корневой path.

Rails 5

В Rails 5, redirect_to :back считается deprecated, и вместо него появился новый метод который называется - redirect_back. В нем в качестве дополнительной опции можно передать fallback_location, и таким образом избавиться от тех костылей которые мы реализовывали выше.

Изменим наш пример для Rails 5

1
2
3
4
5
6
7
8
9
class PostsController < ApplicationController

  def publish
    post = Post.find params[:id]
    post.publish!
    redirect_back(fallback_location: root_path)
  end

end

Как видите все стало намного прозрачнее и проще!

Comments