LoginSignup
270
295

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-02-28

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 %>

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

270
295
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
270
295