##ことの始まり
あるサイトのコピーを作って勉強していた時のこと。
以下の画面でform_withを使って入力画面を作っている。
それぞれの項目に入力したら下書き保存ボタンを押してDBにデータを保存。
その後redirect_toを使って画面遷移したが、なぜか画面遷移ができない...
###前提条件
webpacker使ってます
###エラーが出たコード
= form_with model: @work do |f|
// 入力項目
= f.submit "下書きを保存", class: "btn btn-outline-primary", id: "draft", name: "draft"
下書き保存のボタンを押すと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が関わってくる。
def create
work = current_user.work.new( post_work )
work.save
redirect_to user_url( current_user ) #こいつの挙動が少し変わる
end
##解決方法
###turbolinksを導入する
ターミナル
yarn add turbolinks
import Turbolinks from "turbolinks";
Turbolinks.start();
###formでajaxを使わない
local: trueを追加することでajaxをオフにする
= form_with model: @work, local: true do |f|
これで解決した
##終わりに
間違い等や他に良い解決方法がありましたらコメントでご指摘いただけると幸いです。
ちなみにコピーしてたサイトです。
UIとか綺麗すぎて一目惚れしました。
RESUME
そしてコピー難しすぎて代わりにWeb日記を作っています。
RESUMEの作者さん偉大。