Ruby on Rails3 アプリケーションプログラミング の読書メモ 4章 4章: ビュー開発

4.1: フォーム関係のビューヘルパ


HTML5対応のビューヘルパは、以下の通り

  • email_field
  • telephone_field
  • number_field
  • range_field
  • search_field
  • url_field


非対応ブラウザだと、テキストフィールドになる

form_tag, form_for


フォーム生成用のタグは2種類


form_tag

  • モデルに依存しない汎用的なフォームを生成
  • 検索formとか


form_for

  • 特定のモデルオブジェクトを編集するのに特化
  • 新規、編集用のフォーム


それぞれで、使えるビューヘルパが異なる

FormTag、Form、f.Form


フォームの中の入力フィールドを書く為の方法が3種類ある

呼び名 具体例 解説
FormTag label_tag モデルに関連づかない
Form label form_tag用
f.Form f.label form_for用
<%= form_tag(:action => 'create') do %>
  <%= text_field_tag('keyword') %> # FormTagヘルパ
  <%= text_field(:book, :title) %> # Formヘルパ @book.title に格納される

<%= form_for(@book) do |f| do %>
  <%= f.text_field(:title) %>      # f.Formヘルパ。Formヘルパと異なり、オブジェクトの指定が不要
                                   # text_field(:book, :title) と同じ


form_for は、モデルオブジェクトの状態と、routesの定義で、フォームの送信先を補完する

  • @book が、@book = Book.new ならば、 formの送信先は、books_path になる(action => create)
  • @book が、@book = Book.find(1) ならば、 formの送信先は、book_path(1) になる(action => show)
collection_select


モデルの内容を元に、selectタグを生成する

grouped_collection_select


1対多のモデルの内容を元に、グループ分けされた、selectタグを生成する

date_select, datetime_select, time_select


オプション

  • use_month_numbers : 月を数値で表示
  • start_year, end_year : 範囲。デフォルトは、現在±5年
  • discard_day, discard_month, discard_year : 日, 月, 年を非表示
  • default : デフォルト値
submit


オプション

  • disable_with : 二度押し防止対応。1回押下した後の表示名を設定
  • confirm : 確認ダイアログ表示
fields_for


1対多、1対1のモデルを編集する為のヘルパ

  <%= form_for(@user) do |f| %>
    <%= field_set_tag('著作者情報') do %>
      <%= fields_for @user.author do |af| %>
        <%= af.text_field(:name) %>
      <% end %>
    <% end %>
  <% end %>


1対多の場合については、以下を参照

field_set_tag


<fieldset>, <legend>タグを生成

  • フォームの入力項目をグループ化するためのHTML5タグ