はじめに
今回初めてform_withを使いrailsアプリを作った。
今まで通りアプリを作成していたが今回、今まで(form_for)で出てこなかった不具合があったので
form_withを使う時は
「こんなことになるのかな?」とこの記事に記録として残し、
近いうちにrails (5.2.3)でまた作るのでその時に同じことが起こるのか確認したい。
開発環境
- ruby 2.5.1
- Rails 5.2.3
今回起こったこと
今回起こったことは端的に言うとリダイレクトしないということです。
def destroy
binding.pry
tweet = Tweet.find(params[:id])
if tweet.user.id == current_user.id
tweet.destroy
end
redirect_to tweets_path, notice:'投稿を削除しました'
end
binding.pryを仕込んで処理が間違いなくきてることが確認できているが
その先の
redirect_to tweets_path, notice:'投稿を削除しました'
が動かない
ページをリロードする処理が動く。
色々調べてみるとform_withが悪さをしていそう
form_withのデフォルトremote: true
調べてみるとform_withにはremote: trueと言うオプションがついている。
変更前
= form_with(model: @tweet) do |form|
変更後
= form_with(model: @tweet,data: { remote: false }) do |form|
これで正常に動きました。
エラーが出ないのに動かないのは原因が特定しずらく嫌ですね。
ちょうどturbolinksを削除した時だったので
「turbolinks消すとrails動かなくなるの!?」と混乱していまいましたが
原因がわかってよかったです。
まだform_withを使って全然コードかけてないので
これから知識を深めて行きたいです。
最後に
最後まで読んでいただきありがとうございました。