Railsのform_forの書き方が今ひとつ分からないとき

コード・問題解消

パスを使ったform_forの書き方についてです。

いや、書き方というよりは基本の性能と考え方みたいなのを紹介します。
内容は初学者向けです。

form_forとは、Railでフォームタグを簡単に作成するためのメソッドです。

新規投稿とか、編集画面作成で送信ボタンを押して登録みたいな時にも使います。

スポンサーリンク

form_forについて

Railsでアプリケーションを作成する際に、ほぼ必須のヘルパーですね。

似たヘルパーにform_tagがあります。こちらもフォームタグを作成するメソッドです。

モデルに基づくformには、form_forを使い・・
モデルに基づかないformには、form_tagを使用することが多いです。

例えばユーザーの登録や情報の更新機能にはform_forを、検索機能にはform_tagを使用するなどといったように使い分けます。

Railsのform_forの書き方

form_forは以下のように書きます。

<%= form_for(モデル,[オプション]) do |f| %>
    フォームの中身
<% end %>

モデルの部分には、@userや@postなどモデルオブジェクトを入れます。
オプションでは、送信先のurlやタグの設定(クラスをつけたり、MIMEタイプを指定したり)をします。パスもここで設定します。edit_user_path等、いじりたいパスに向けて下記のform_forの内容を飛ばすイメージでURLやパスを設定します。

Railsでは、自動で送信先の振り分けが行われるので、基本的にurlオプションは操作しなくてよいです。画像を送信したい場合やformタグにクラスをつけたい場合は、以下のように書きましょう。

<%= form_for(@food, url: users_food_path ) do |f| %>
<% end %>

こんな感じです。

どんな感じか実際に書いてみる

簡単なフォームを作成します。Postモデルがstring型でcontentというカラムをもっているとして、フォームを書いてみましょう。

<%= form_for(@food, url: users_food_path ) do |f| %>
  <%= f.label :content %>
  <%= f.text_field :content %>
  <%= f.submit "送信する" %>
<% end %>

f.とすることで、ポストモデルとlabelやテキストボックス(text_field)を紐づけることができます。f.labelは、contentのラベルタグを生成しf.text_fieldは、contentのテキストボックスを生成します。f.submitがこのフォームの送信ボタンを作成しています。

resouceを使ったモデル記述はurlのところを書かなくても自動で判断してくれるみたいです。

お時間あるときにでも試してみましょう。

ではでは。

コメント

タイトルとURLをコピーしました