Railsのフォーム基本的な作成方法まとめ(form_forとかform_tag)

  • 134
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

railsでフォームを作ろうとすると知っていれば簡単だけど、知らないと調べる面倒っていうのが結構あるのでまとめてみました。
rails4系対応です。

form_forとform_tag

フォームを宣言するメソッドとして
form_forとform_tagがあります。

form_for

こっちはモデルに基づいたフォームを作成するのに向いています。
基本的にフォームの項目とモデルの属性は一致しているものなので、こっちを使うことが多いのかな・・・と思っています。

<% form_for(@article) do |f| %>
  <div><%= f.text_field :title, class: "hogehoge" %></div>
  <%= f.submit %>
<% end %>

管理画面で作成した記事をフロントで表示させたい、でも使うモデルは一緒なんて言う場合結構困ったりします。
例えば管理画面が http://www.example.com/admin
なんて言う場合は、下記のようになります。

<% form_for([:admin, @article]) do |f| %>
<% end %>

form_tag

モデルに基づかないフォームを作成するときはこちら。

<% form_tag(:controller => article, :action => create) %>
  <div><%= text_field :title, class: "hogehoge" %></div>
  <%= submit_tag "作成" %>
<% end %>

テキストボックス

f.text_field(プロパティ名, [オプション])

<%= f.text_field :title, class: "hogehoge" %>

オプションでスタイル指定やclass名の指定ができます。

テキストエリア

f.text_area(プロパティ名, [オプション])

<%= f.text_area :content, class: "hogehoge", size: "100x50" %>

テキストボックスとほぼ一緒。
サイズ指定が、cols x rowsになってます。

セレクトボックス

f.collection_select(プロパティ名, オブジェクトの配列, value属性の項目, テキストの項目 [, オプション])

<%= f.collection_select :category, Category.all, :id, :category_name, include_blank: true %>

Categoryモデルを別途作成しておけば、簡単にカテゴリー一覧が入ったモデルの作成ができます。

チェックボックス

f.collection_check_boxed(オブジェクト名, プロパティ名, オブジェクトの配列, value属性の項目, テキストの項目 [, オプション])

<%= f.collection_check_boxes(:article, :tag_ids, Tag.all, :id, :tag_name) do |b| %> 
  <%= b.label {b.check_box + b.text} %>
<% end %>

いわゆる多対多のモデルで使用するパターンが多いのかなと思ってます。
知っていれば、こんな簡単にできるのか!と思うのですが知らないと結構はまる。。。

StrongParameters対応としては

params.require(:article).permit({:tag_ids=>[]}

こんな感じです。

ラジオボタン

f.collection_radio_buttons(オブジェクト名, プロパティ名, オブジェクトの配列, value属性の項目, テキストの項目 [, オプション])

<%= f.collection_radio_buttons(:article, :type_ids, Type.all, :id, :type_name) do |b| %>
  <%= b.label {b.radio_button + b.text} %>
<% end %>

チェックボックスとほぼ一緒。