1
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 1 year has passed since last update.

form_withについて

Posted at

❶form_withとは

♦︎情報を送信するためのヘルパーメソッドの一つ。
♦︎セキュリティー対策などが組み込まれた、安全なHTMLのformタグを作成できる。
♦︎つまりは投稿ページを作るときのフォームを実装するためにある。

form_withの基本形
<%= form_with(model or scope or URL [,オプション]) do |f| %>
<% end %>

この|f|はブロック変数、つまり特定の範囲内で使える変数のことです。
このdo〜endの範囲でのみ使うことができます。
変数の違いがわからない方はこちら↓

https://www.sejuku.net/blog/12879

form_withのオプション

オプション 指定 デフォルト値
:model モデルを指定
:scope スコープを指定
:url URL指定
:local リモート送信の無効 false
:method HTTPメソッドを指定 POST

:local
form_withではデフォルトが非同期通信になってる(Rails6.1からは同期通信がデフォルトになってるらしいので自分のバージョンに注意!)ので、引数で"local: true"を渡してあげることで、通常の同期通信を実装することができます。

上記のオプションはよく使用する一例で、使用できるオプションは他にもありますので公式ドキュメントを参照ください。

https://railsdoc.com/page/form_with

❷form_withを使ってみる

先ほどの基本形をベースに「モデルを指定するかorどのURLへデータを送るかorどのHTTPメソッドで送るか」を定義します。

(例)①Postモデルと連携した場合
<%= form_with model: Post.new do |f| %>
<% end %>
(例)②URLを指定する場合
<%= form_with url: posts_path do |f| %>
<% end %>

♦︎①のmodelを指定するとデータベースに保存される。②のurl指定は送る情報をデータベースに保存しない
♦︎form_wothのベースができたら、このform_with〜endの範囲にテキストフィールドやボタンを設置していく

modelと連携した場合の便利な機能
☑︎form_withはモデルと連携することで、データの保存が簡単にできる
☑︎引数として渡されたモデルクラスのインスタンスの中身の有無で、アクションをcreateかupdateに勝手に振り分けてくれる

勝手に振り分けるってどう言うこと??となった方は下記記事がとてもわかりやすいので参照ください。

https://qiita.com/yamaday0u/items/a3689bc48a7eff55929b

〜form_withとモデルオブジェクト〜

モデルオブジェクト
タイトルや本文、ボタンを実装するためのヘルパー。
これらの部品を作成するヘルパーをモデルオブジェクトと言います。

モデルオブジェクトの例

使用場面 モデルオブジェクト
単一行のテキストフィールド(titleとか) text_field
複数行のテキストフィールド (本文とか) text_area
送信や投稿ボタン submit

これらのモデルオブジェクトを作成するために、冒頭で説明したあの|f|ことブロック変数を使用します。

<%= form_with model: Post.new do |f| %>
  <%= f.text_field :title %>
<% end %>

♦︎ブロック変数の|f|にはモデル(ここで言うならPostモデル)の情報が入っているので、Postモデルにあるtitleカラムと判別することができ、データベースに保存ができる。

❸投稿フォームの作成

app/views/posts/new.html.erb
<h1>新規投稿</h1>
<!-- 以下form_withの例 -->
<%= form_with model: Post.new do |f| %>
  <h3>タイトル</h3>
  <%= f.text_field :title %>
  <h3>本文</h3>
  <%= f.text_area :body %>	
  <%= f.submit '投稿' %>
<% end %>

以上になります。下記も参照させていただきました。

https://pikawaka.com/rails/form_with

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