6
1

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 5 years have passed since last update.

【Rails】submit後のredirect_toが動かない時の対処法

Posted at

ことの始まり

あるサイトのコピーを作って勉強していた時のこと。
以下の画面でform_withを使って入力画面を作っている。
それぞれの項目に入力したら下書き保存ボタンを押してDBにデータを保存。
その後redirect_toを使って画面遷移したが、なぜか画面遷移ができない...
スクリーンショット 2019-07-21 11.24.48.png

前提条件

webpacker使ってます

エラーが出たコード

_form.html.slim
= form_with model: @work do |f|
//  入力項目
  = f.submit "下書きを保存", class: "btn btn-outline-primary", id: "draft", name: "draft"

下書き保存のボタンを押すとworks_controller.rbが実行される

works_controller.rb
  def create
    work = current_user.work.new( post_work )
    work.save
    redirect_to user_url( current_user ) #ここの部分でエラー出た
  end

エラー内容

Uncaught ReferenceError: Turbolinks is not defined

原因

turbolinksがないぞって言われてる

そもそもredirect_toってturbolinksと関係あるのかという疑問が浮かんできたので
色々調べてみた。

form_withはデフォルトでajaxを使ってformを送信している。
そのajaxを使ってformを送信すると
送信先のコントローラーで実行されるredirect_toの挙動にturbolinksが関わってくる。

works_controller.rb
  def create
    work = current_user.work.new( post_work )
    work.save
    redirect_to user_url( current_user ) #こいつの挙動が少し変わる
  end

解決方法

turbolinksを導入する

ターミナル

yarn add turbolinks
application.js
import Turbolinks from "turbolinks";
Turbolinks.start();

formでajaxを使わない

local: trueを追加することでajaxをオフにする

_form.html.slim
= form_with model: @work, local: true do |f|

これで解決した

終わりに

間違い等や他に良い解決方法がありましたらコメントでご指摘いただけると幸いです。

ちなみにコピーしてたサイトです。
UIとか綺麗すぎて一目惚れしました。
RESUME
そしてコピー難しすぎて代わりにWeb日記を作っています。
RESUMEの作者さん偉大。

6
1
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
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?