概要
質問投稿アプリを作っている最中、
投稿に失敗したら質問投稿画面に戻る仕様を実装してる際に、表題のエラーに捕まりました。
↓当該コード
def create
@micropost = current_user.microposts.build(micropost_params)
if @micropost.save
flash[:success] = "Micropost created!"
redirect_to root_url
else
redirect_to 'microposts/new'
end
end
結論
原因は下から3行目のredirect_to 'microposts/new'にありました。
エラーを解消する方法は以下の2つです。
①リクエストを経由する必要がない場合はredirect_toをrenderに置換する
(そもそもrenderとredirect_toの違いって何だっけ?という方は以下へ)
https://qiita.com/koki_73/items/78b8cb2bde7930d55194
②以下のコードをapplication_controllerに加える
rescue_from ActionController::Redirecting::UnsafeRedirectError do
redirect_to root_url
end
エラーの内容
リダイレクトした際に外部サイトへ遷移してしまうことを防ぐために
Railsが発生させたエラーでした。
②のコードもRailsがそのエラーへの解決策として用意したものです。
ただ②を加えると今後発生し得る全てのUnsafeRedirectErrorが
パスしてしまうため注意が必要です。
私は①で解決しました。単純な内容でつまずいてました…。
参考
↓より詳しい解説
https://blog.saeloun.com/2022/02/08/rails-7-raise-unsafe-redirect-error.html
↓②のGithub
https://github.com/rails/rails/commit/c3758a71af949db849d5b7f176677653e4e4fae9