質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

2217閲覧

Rails form_for/form_tagメソッドについて

jimy

総合スコア17

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2014/09/21 14:22

Railsで登場する、
form_for/form_tagメソッドについてどなたか違いを
教えてくれませんか?
お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

3 つの参考ページを紹介します。
簡単にいえば、

  • どちらでも同じことを記述するのは可能。
  • モデルがあるデータに対しては、 form_for をつかうほうが簡単に記述できる。

ということのようです。

...
最も基本的なフォームヘルパーはform_tagです。
...
我々は何とかしてフォームをモデルオブジェクトに紐付けたいと考え、form_forを作りました。
...
5. アップロードファイル
...
ファイルアップロードにおいて覚えておいてもらいたい最も重要な事は、 出力するフォームのエンコーディングを"multipart/form-data"にしなければいけないという事です。 もし、form_forを使用しているのであれば、これはそれを自動的に行なってくれます。 もし、form_tagを使用しているのであれば、 下記の例についても、それぞれ自分でこの設定を行わなければいけません。

下記のどちらのフォームも、ファイルをアップロードします。

<%= form_tag({action: :upload}, multipart: true) do %>
<%= file_field_tag 'picture' %>
<% end %>
<%= form_for @person do |f| %>
<%= f.file_field :picture %>
<% end %>
...

...
「form_tag」と「form_for」どちらを使うべきかは、基本的にモデルの有無で判断します。入力フォームで入力するデータのモデルがあれば「form_for」を使い、入力するデータが特にモデルを持っていなければ「form_tag」を使います。
form_for: モデルがあるデータを扱うときに使う。(記事投稿フォームなど)
form_tag: モデルがないデータを扱うときに使う。(検索フォームなど)
...

...
form_forは特定のモデルを編集、追加する際に使用する。
form_tagは特定のモデルが存在しない、汎用的なフォームで使用する。
...

投稿2014/09/22 15:18

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimy

2014/09/25 06:35

詳しく説明して頂いたので、理解することが出来ました。 回答ありがとうございました!!
guest

0

form_forメソッドは、
ある特定のモデルオブジェクトを編集することに特化したメソッドです。

form_tagメソッドは
モデルに関係しないフォームを生成するためのメソッドです。

投稿2014/09/21 14:53

rupin

総合スコア72

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問