Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
291
Help us understand the problem. What is going on with this article?
@ykyk1218

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

More than 5 years have passed since last update.

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

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

291
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ykyk1218

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
291
Help us understand the problem. What is going on with this article?