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?