LoginSignup
151
201

More than 5 years have passed since last update.

【Rails】フォームヘルパーの種類と例

Last updated at Posted at 2018-08-27

入力フォームを作る

入力のためのフォームを作成するために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 %>

これらを使ってテーブルに新しいデータを追加する方法はこちらで紹介している。

151
201
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
151
201