##はじめに
Railsチュートリアル7章あたりからコードが段々と難しくなり、特にform_forヘルパーメソッドについては中々わからなかったので自分なりに調べて解説してみます。
##form_forヘルパーメソッド
ヘルパーメソッドとはViewをよりシンプルに重複を少なく書くためのメソッドです。
その中でもform_forヘルパーメソッドはRailsでフォームタグを簡単に作成することができるメソッド。実際には以下のようなコードを書いて使用します。()は省略することができます。
<%= form_for(モデルクラスのインスタンス) do |f| %>
フォームの中身
<% end %>
Railsチュートリアルの7.2ユーザー登録フォームを例にとります。
form_forの引数にはモデルクラスのインスタンスを入れるということなのでコントローラで@user変数を定義します。
「モデルクラスのインスタンス」とは保存したいテーブルのクラスのインスタンスという意味です。
ユーザー登録する際にはもちろん「usersテーブル」が対象となります。
class UsersController < ApplicationController
def new
@user = User.new
end
end
次にHTMLにform_forヘルパーメソッドを使用してテンプレートを構築します。
<%= form_for(@user) do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<% end %>
今回はform_forヘルパーメソッドを理解するのが目的なので、理解に不要なコードは削除してます。
フォームの中身として2つのコードを書きました。それぞれのコードは以下のようなHTMLを生成しています。
<%= f.label :name %>
<label for="user_name">Name</label>
<%= f.text_field :name %>
<input id="user_name" name="user[name]" type="text" />
フォームに入力する内容によって「◯◯◯_field」となります。
例えばパスワードを入力させたいフォームを生成する際は「password_field」, メールアドレスを入力させたいフォームを生成する際には「email_field」となります。
全体のHTMLソースは以下のコードになります。
<form accept-charset="UTF-8" action="/users" class="new_user"
id="new_user" method="post">
<input name="utf8" type="hidden" value="✓" />
<input name="authenticity_token" type="hidden"
value="NNb6+J/j46LcrgYUC60wQ2titMuJQ5lLqyAbnbAUkdo=" />
<label for="user_name">Name</label>
<input id="user_name" name="user[name]" type="text" />
<input class="btn btn-primary" name="commit" type="submit"
value="Create my account" />
</form>
長い。今回は学習を進める上で重要な部分のみを見ていきます。
<form accept-charset="UTF-8" action="/users" class="new_user"
id="new_user" method="post">
.
.
.
</form>
このようにformタグが生成されました。重要なのはaction="/users"
とmethod="post"
の2つ。
これは「/usersに対してHTTPのPOSTリクエストを送信する」という意味です。
Railsは@userのクラス(User)、@userが新しいユーザーかどうかを認識しますので、「postメソッドを使ってフォームを構築すべき」と判断してくれます。
そのため自分で指定していなくても上のコードのようなformタグが形成されます。
##最後に
少しでも学習を進めている人のお役に立てられたら幸いです。
参考
・pikawaka.com
・sejuku.net