26
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】POST後の画面をリロードしたのにURLをGETしてしまうときの対処法

Last updated at Posted at 2019-11-17

#概要
Ruby on Railsにおいてフォームでバリデーションエラーになったあと、その画面をリロードしたときに、URLへのリクエストメソッドがPOSTではなくGETになってしまうという問題が起きました。
どのようにしてその問題を解決すれば良いか、調べてもすぐにはわからなかったので、本記事ではその対処法などについてまとめます。

#環境
Ruby 2.6.4
Ruby on Rails 5.2.3
Turbolinks 5.2.1

#問題
###期待していた動き
フォームでバリデーションエラーになったあと、その画面をリロードしたときに、
画面上に「フォーム再送信の確認」というダイアログが出る。
スクリーンショット 2019-11-17 22.48.00.png

###実際の動き
URLへのリクエストメソッドがPOSTではなくGETになってしまい、
GETメソッドでの/usersへのルーティングがないため、その旨のエラー画面が表示されてしまった。
スクリーンショット 2019-11-17 21.21.26.png

#原因
Turbolinksが原因です。
Turbolinksがhistory apiで履歴を操作しており、history apiに履歴を足すときはGETメソッドでのURLしか足せないため、URLをGETで取得しようとする…らしいです。
正直くわしいところはわかりませんでした。

Turbolinksとは、jsとcssの読み込み処理を省略することで、画面遷移を高速化させる組み込みライブラリです。
くわしくは、以下の記事をご参照ください。

#対処法
###1. application.js から//= require turbolinksを削除する。
####Before

app/assets/javascripts/application.js
//= require rails-ujs
//= require activestorage
//= require turbolinks
//= require_tree .

####After

app/assets/javascripts/application.js
//= require rails-ujs
//= require activestorage
//= require_tree .

これで問題は解決されますが、Turbolinksは不要になったので、これ以降の手順もしましょう。

###2. Gemfileからgem 'turbolinks'を削除する。
####Before

Gemfile
# (前略)
gem 'coffee-rails', '~> 4.2'
gem 'turbolinks', '~> 5'
gem 'jbuilder', '~> 2.5'
# (後略)

####After

Gemfile
# (前略)
gem 'coffee-rails', '~> 4.2'
gem 'jbuilder', '~> 2.5'
# (後略)

###3. application.html.erb からdata-turbolinks-track': 'reload'を削除する。
####Before

app/views/layouts/application.html.slim
doctype html
html
  head
    title
      | Application
    = csrf_meta_tags
    = csp_meta_tag
    = stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload'
    = javascript_include_tag 'application', 'data-turbolinks-track': 'reload'
# (後略)

####After

app/views/layouts/application.html.slim
doctype html
html
  head
    title
      | Application
    = csrf_meta_tags
    = csp_meta_tag
    = stylesheet_link_tag    'application', media: 'all'
    = javascript_include_tag 'application'
# (後略)

#参考

26
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?