LoginSignup
0
0

More than 3 years have passed since last update.

【初心者向け】form_forヘルパーメソッド

Posted at

はじめに

Railsチュートリアル7章あたりからコードが段々と難しくなり、特にform_forヘルパーメソッドについては中々わからなかったので自分なりに調べて解説してみます。

form_forヘルパーメソッド

ヘルパーメソッドとはViewをよりシンプルに重複を少なく書くためのメソッドです。

その中でもform_forヘルパーメソッドはRailsでフォームタグを簡単に作成することができるメソッド。実際には以下のようなコードを書いて使用します。()は省略することができます。

◯◯◯.html.erb
<%= form_for(モデルクラスのインスタンス) do |f| %>

 フォームの中身

<% end %>

Railsチュートリアルの7.2ユーザー登録フォームを例にとります。

form_forの引数にはモデルクラスのインスタンスを入れるということなのでコントローラで@user変数を定義します。

「モデルクラスのインスタンス」とは保存したいテーブルのクラスのインスタンスという意味です。

ユーザー登録する際にはもちろん「usersテーブル」が対象となります。

app/controllers/users_controller.rb
class UsersController < ApplicationController

  def new
    @user = User.new
  end
end

次にHTMLにform_forヘルパーメソッドを使用してテンプレートを構築します。

app/views/users/new.html.erb
<%= form_for(@user) do |f| %>
      <%= f.label :name %>
      <%= f.text_field :name %>
<% end %>

今回はform_forヘルパーメソッドを理解するのが目的なので、理解に不要なコードは削除してます。

フォームの中身として2つのコードを書きました。それぞれのコードは以下のようなHTMLを生成しています。

<%= f.label :name %>

HTML
<label for="user_name">Name</label>

<%= f.text_field :name %>

HTML
<input id="user_name" name="user[name]" type="text" />

フォームに入力する内容によって「◯◯◯_field」となります。

例えばパスワードを入力させたいフォームを生成する際は「password_field」, メールアドレスを入力させたいフォームを生成する際には「email_field」となります。

全体のHTMLソースは以下のコードになります。

全体のHTMLソース
<form accept-charset="UTF-8" action="/users" class="new_user"
      id="new_user" method="post">

  <input name="utf8" type="hidden" value="&#x2713;" />
  <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

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