SuzuBlog

webのお勉強はじめたばかりの初心者。備忘録

Rails基礎 フォームヘルパー(form_for)

フォームヘルパーとは?

Railsでフォームを作成するためのヘルパー。 これを使用すると簡単な記述でフォームを作成することが可能になる。 内部ではHTMLを生成してくれる。input、textarea、submit等

  • form_for

  • form_tag

  • form_with

と3種類用意されているが、Rails5.1で登場したform_withは他2つを統合したものになるため、 Rails5.1以降はform_withを使用することが推奨されている

今回ドットインストールに出てきたのがform_forだったため、これについて書いていく。

form_for

form_forは特定のモデルを編集・作成するのに向いている。 フォームとモデルオブジェクトを紐付けることで簡単に作成することができる。

html.erbファイルに記述していく。

<%= form_for @post, url: posts_path do |f| %>
    <p>
        <%= f.text_field :title, placeholder: 'enter title' %>
    </p>
    <p>
        <%= f.text_area :body, placeholder: 'enter body text' %>
    </p>
    <p>
        <%= f.submit %>
    </p>
<% end %>

ちなみに、1行目を省略しないで書くと以下

<%= form_for(@post, {url: posts_path}) do |f| %>
オプション
オプション 説明 デフォルト値
:as ハッシュのキー名前
:url フォームの送信先
:namespace 名前空間の設定
:method メソッド(get, post, patch, put, deleteなど)
:authenticity_token 認証トーク
:remote JavaScriptを使うか false
:enforce_utf8 utf8用の非表示用を出力するか? true
:html タグの属性
:format フォーマット

form_forでの入力は、上記の場合post[属性名]というフォーム名を持つ。 今回だと:title:bodyキーを持つハッシュがparams[:post]に入る。

:urlオプションを渡しルーティングパスを指定している。

Controllerで作成したインスタンスが空であればcreateアクション、そうでなければupdateアクションへ自動的に振り分けてくれる。

fオブジェクトを使用することでテキストボックスをはじめ、チェックボックスやパスワード入力ボックス、ファイル選択フォーム等を簡単に作成することが可能になる。

  • check_box…チェックボックス
  • radio_button…ラジオボタン
  • text_area…テキストエリア
  • password_field…パスワード入力ボックス
  • hidden_field…隠しフィールド
  • label…ラベルタグ
  • text_field…テキストボックス
  • file_field…ファイル選択ボックス
  • select…選択ボックス
  • email_field…メールアドレス入力ボックス
  • number_field…数値入力ボックス
  • range_field…範囲選択バー
  • search_field…検索ボックス
  • telephone_field…電話番号入力ボックス
  • url_field…URL入力ボックス
  • submit…サブミットボタン
  • datetime_select…日時選択ボックス
  • color_field…色の入力欄
  • date_field…日付の入力欄
  • datetime_field…日時の入力欄
  • datetime_local_field…ローカル日時の入力欄
  • month_field…月の入力欄
  • time_field…時間の入力欄
  • week_field…週の入力欄
  • date_select…日付選択ボックス
  • time_select…時間選択ボックス

等…最後に_tagをつけると汎用的な○○ができるらしい。

いずれ各メソッドがどんな形でこれらを生成するのか確かめたい。

参考

railsdoc.com

railsguides.jp

pikawaka.com