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 %>
チェックボックスとほぼ一緒。