1
0

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】form_withを使用すると画面が固まってしまう!?

Posted at

経緯

プログラミング歴3ケ月の初心者です。
先日、個人的にアプリケーションを作成しておりまして…
**「form_with」**を用いてメッセージ投稿フォームを実装していた時のこと。。

ビュー
= form_with model: @post, url: posts_path, method: :post, html:{ class: "post" } do |f|
  = f.text_area :post
  = f.submit "投稿する"

あれ、、「投稿する」ボタンを押してもビュー(画面)が推移しないぞ??

モデルやパスを確認しても間違ってはなさそう…
なのに、コントローラーで処理されない。。

そう、私はform_withをわかったふりして完全に舐めていたのです。(もちろんそんな気はありませんでしたが)
なぜなら、今まで勉強してきたのは form_for、form_tag だったので、書き方が変わるだけで同じことができるだろうと思っていました。

原因

早速答えを言っちゃうと、form_withは**自動的にajax処理(非同期通信)**をしてしまうんです!!
もちろん、 form_for、form_tag にはそんな仕様ありませんでした。

解決策

ビュー
//form_withの最後に local: true を記載してあげます。 
= form_with model: @post, url: posts_path, method: :post, html:{ class: "post" }, local: true do |f|
  = f.text_area :post
  = f.submit "投稿する"

上記のように記載したら、普通に投稿できるようになりました。

ajax処理をしたい場合…そのまま
ajax処理をしない場合…local: true

まとめ

以上になります。

某スクールや○○gateでは form_for、form_tag で勉強することが多いので、
私以外にも今回のような状況に陥ってしまう方がいるのでは?
と思い、今回書いてみました。

form_for、form_tag はとても勉強になるのでform_withに慣れてしまう前に一度勉強してみることを
お勧めしますが、やはり別物なので、form_withもしっかり勉強が必要だなと感じた今日この頃でした。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?