0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Railsチュートリアル 第12章 演習 - form_forメソッドで、@password_resetではなく:password_resetを使っている理由

Posted at

ユーザー登録フォームのform_forメソッドを:userで構成した場合に出力されるHTML

仮に、ユーザー登録フォーム(app/views/users/new.html.erb)を以下のような埋め込みRubyで構成したとします。第1引数が:userであることがポイントです。

<%= form_for(:user, url: yield(:path)) do |f| %>

出力されるHTMLは以下のようになります。

<form action="/signup" accept-charset="UTF-8" method="post">
  <!-- 略 -->
</form>

ユーザー登録フォームのform_forメソッドを@userで構成した場合に出力されるHTML

一方で、ユーザー登録フォーム(app/views/users/new.html.erb)を以下のような埋め込みRubyで構成した場合はどうなるでしょうか。第1引数が@userであることがポイントです。

<%= form_for(@user, url: yield(:path)) do |f| %>

出力されるHTMLは以下のようになります。

<form class="new_user" id="new_user" action="/signup" accept-charset="UTF-8" method="post">
  <!-- 略 -->
</form>

form要素に、:userの場合には定義されていなかったid="new_user"class="new_user"といった属性が定義されています。

ユーザー編集フォームのform_forメソッドを@userで構成した場合に出力されるHTML

今度は、@userで構成したform_forメソッドをユーザー情報編集フォーム(app/views/users/edit.html.erb)で使うとどうなるでしょうか。

<%= form_for(@user, url: yield(:path)) do |f| %>

出力されるHTMLは以下のようになります。

<form class="edit_user" id="edit_user_1" action="/users/1" accept-charset="UTF-8" method="post">
  <!-- 略 -->
</form>

form要素に、id="edit_user1"class="edit_user"といった属性が定義されています。

form_forメソッドの第1引数として@userを与えた場合、何のアクションに対してのフォームであるかに応じて、Railsがid属性やclass属性を自動で定義してくれます。一方で、:userの場合だと、そのような属性の自動定義は行われません。

@password_resetではなく:password_resetを使っている理由

「何のアクションに対してのフォームであるかに応じて、Railsがid属性やclass属性を自動で定義する」というのが役に立つのは、「パーシャルを使って、neweditでフォームの実装を使い回す」といった場合です。本文第10章の演習 - 編集フォームで実装したapp/views/users/_form.html.erbが典型的な例です。

PasswordResetsリソースにおいては、一度生成されたリソースの内容そのものを書き換えるようなユースケースは想定されていません。そのため、「何のアクションに対してのフォームであるかに応じて、Railsがid属性やclass属性を自動で定義する」という機能も使いません。このあたりが「@password_resetではなく:password_resetを使っている理由」となるでしょう。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?