redirect_to :back
をなんとなく使ってみたら
DEPRECATION WARNING: redirect_to :back
is deprecated and will be removed from Rails 5.1. Please use redirect_back(fallback_location: fallback_location)
where fallback_location
represents the location to use if the request has no HTTP referer information.
..とおこられてしまった.
つまり
request.refererがnilなとき,fallback_locationにリダイレクトしてくれる
ってことなんでしょうが、なんでそもそもredirect_to :backが非推奨なのか少し調べてみました.
#HTTP_REFERERがないときActionController::RedirectBackErrorが発生
class PostsController < ApplicationController
def publish
post = Post.find params[:id]
post.publish!
redirect_to :back
end
end
こういう実装にしたとき,HTTP_REFERER
がないことでエラーになってしまうことを防ぐため
これまでは
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
としていたと.
Rails 5.1系からは
redirect_to :back
が
redirect_back(fallback_location: root_path)
におきかわりrescueしなくてもよいみたいです
class PostsController < ApplicationController
def publish
post = Post.find params[:id]
post.publish!
redirect_back(fallback_location: root_path)
end
end
としておけばエラーが出る前にroot_pathにとんでくれるようになりました.