はじめに
下記の記事を参考させていただいております。
https://pikawaka.com/rails/form_with
form_withとは、railsで情報を送信するためのヘルパーメソッドです。
form_withを使うことにより、簡単に入力フォームに必要なHTMLを作成することができます。
ヘルパーメソッドとは
Railsにおける、主にビューでHTMLタグを出現させたりテキストを加工するために使用するメソッドの総称です。
ヘルパーメソッドの利点は
パスの指定やRubyの埋め込みなどの記述がシンプルになる
セキュリティ上の問題を解消できる
などです。
書き方とツール
基本的な書き方
データベースに保存しない場合のform_withの書き方
<%= form_with url: "パス" do |form| %>
# フォーム内容
<% end %>
データベースに保存する場合のform_withの書き方
<%= form_with model: モデルクラスのインスタンス do |form| %>
# フォーム内容
<% end %>
例えば下記のようなコードではこんなフォームがブラウザに表示されます。
<%= form_with(model: @user, url: entrys_path, local: true) do |form| %>
<h1>ユーザー名を入力</h1>
<div class="field">
<%= form.label :name, "名前(全角)" %>
<%= form.text_field :name %>
</div>
<% end %>
ちなみにform_withの機能で、
引数として渡されたモデルクラスのインスタンスが中身の入ったインスタンスの場合、updateアクションへ処理を振り分け、
反対に、引数として渡されたモデルクラスのインスタンスが中身の入っていないインスタンスの場合は、createアクションへ処理を振り分けてくれます。
自動的に処理を振り分けてくれるので、メソッドの指定はしていません。
発展形の書き方
オプションをつける場合
<%= form_with model: モデルクラスのインスタンス, オプション, do |form| %>
フォームの内容
form.htmlタグ名 :カラム名
オプションとメソッド
オプション名 | 説明 |
---|---|
urlオプション | フォームの情報を送るリクエストのパスを指定。 |
methodオプション | フォームの情報を送るリクエストのHTTPメソッドを指定。オプションの初期値は:postなので、postメソッドを指定する場合は省略できる。 |
localオプション | リモート送信を無効にするかどうかを指定。trueにすると無効になる。 |
htmlタグメソッド | 用途 |
---|---|
form.text_field | 一行のテキスト投稿フォーム |
form.text_area | 複数行のテキスト投稿フォーム |
form.number_field | 数値入力ボックスを生成 |
form.search_field | 一行の検索フォーム |
form.email_field | メールアドレス入力ボックスを生成 |
form.check_box | データベースの情報を使わないでチェックボックスを生成 |
form.collection_check_boxes | データベースの情報を元にチェックボックスを生成 |
form.select | 選択肢を作成 |
form.collection_select | データベースの情報を元に選択肢を生成 |
form.file_field | ファイル選択ボックスを生成 |
form.datetime_field | 日時の入力欄を生成 |
form.date_select | 日付選択ボックスを生成 |
form.hidden_field | 非表示のフォーム |
form.submit | 送信ボタンの生成 |