#入力フォームを作る
入力のためのフォームを作成するためにHTMLにはフォームタグというタグが存在する。
Railsのヘルパー「フォームヘルパー」を用いて、フォームタグを生成する例を紹介していく。
##フォームの種類
様々な入力フォームがあるので、用途に応じて下記から選んで使用。
メソッド名 | 機能 | メソッド名 | 機能 |
---|---|---|---|
search_field | 検索用ボックス | week_field | 週ボックス |
label | ラベルを作成 | telephone_field | 電話番号用ボックス |
text_field | テキストボックス | file_field | ファイル選択用ボックス |
email_field | メールアドレス用ボックス | password_field | パスワード用ボックス |
range_field | 範囲選択バー | hidden_field | 隠しフィールド |
number_field | 数値選択 | text_area | テキストエリア |
select | 選択ボックス | check_box | チェックボックス |
date_field | 日付ボックス | radio_button | ラジオボタン |
datetime_field | 日付時刻ボックス | url_field | URL用ボックス |
datetime_local_field | 日付時刻ボックス(ローカル) | color_field | 色選択ボックス |
month_field | 月ボックス | submit | 提出用ボタン |
time_field | 時刻ボックス |
##form_tagとform_for
フォームを扱うことのできるメソッドは「form_tag」と「form_for」の2種類。
- form_tag
モデルと関係しない汎用的なフォームを生成 - form_for
特定のモデルを編集するのに特化している
上に示した特徴踏まえて、どちらを使用するか決定。
#使い方
HTMLファイル内における記述の仕方を実例と一緒に紹介していく。
##form_tag
form_tagを使用する部分を
<%= form_tag(rootpath名, method: HTTPメソッド) do %>
<% end %>
で囲む。
# 例
<%= form_tag(users_path, method: :post) do %>
<!-- ここにform_tagメソッドを記述 -->
<% end %>
rootpath名ではなく相対パスや、コントローラ名とアクション名で代用することもできる。
# 例
<%=form_tag({controller: :users, action: :create}) do %>
<!-- ここにform_tagメソッドを記述 -->
<% end %>
このようにコントローラ名を用いる場合は、routes.rbにおいてポスト先のルートをしっかり定義しておく必要がある。
また、HTTPメソッド(POST, GET, PUTなど)は指定しない場合は自動的にPOSTにしてくれる。
form_tagメソッドは基本的に、下記の形になる。(サンプル)
<%= [メソッド名]_tag :名前 %>
#例 <%= email_field_tag :email %>
##form_for
form_forを使用する部分を
<%= form_for(格納したい変数, url: rootpath名, method: HTTPメソッド名) do |f| %>
<% end %>
で囲む。
# 例
<%= form_for(@user, url: users_path, method: :post) do |f| %>
<!-- ここにメソッドを記述 -->
<% end %>
form_forメソッドは基本的に、下記の形になる。(サンプル)
<%= f.[メソッド名] :カラム名 %>
#例 <%= f.telephone_field :phone %>
これらを使ってテーブルに新しいデータを追加する方法はこちらで紹介している。