質問: 現在RailsTutorialの10章を行っていますが、題目の内容がわかりません。 下がコードなのですが、 ``` <%= form_for(@user) do |f| %> <%= render 'shared/error_messages' %> <%= f.label :name %> <%= f.text_field :name, class: 'form-control' %> <%= f.label :email %> <%= f.email_field :email, class: 'form-control' %> <%= f.label :password %> <%= f.password_field :password, class: 'form-control' %> <%= f.label :password_confirmation, "Confirmation" %> <%= f.password_field :password_confirmation, class: 'form-control' %> <%= f.submit "Save changes", class: "btn btn-primary" %> <% end %> <%= gravatar_for @user %> change ``` フォームというnameやemailなど1回表示すれば事足りる類のものに対して、for文のような繰り返しを意味するブロック構文を使う意味が分からないことや、そもそもフォームを入力するのに、データベースから持ってきた@userの情報はいらないと考えました。 form_forについても調べても要領を得ることができず、理解ができない状態です。 質問事項は以下です。 1フォームというnameやemailなど1回表示すれば事足りる類のものに対して、for文のような繰り返しを意味するブロック構文を使う意味が分からない 2フォームを入力するのに、データベースから持ってきた@userの情報はいらないのではないか 3form_forについても調べても要領を得ることができない そして、こういう質問をしている以上、フォームやブロック構文についてよくわかってないのが現状だと思っています。質問事項が要領を得ない場合は、フォームとは?ブロック構文とは?なぜこのようなコードが書かれているのか?までご教授願えると幸いです! お手数おかけしますが、以上、分かる方がいらっしゃいましたらご教授願えればと思います!
回答: 説明の都合上、順番を変えて説明します。 > > 3form_forについても調べても要領を得ることができない > > > `form_for`は、指定したモデルに応じて、Railsの標準的なルーティングで作ったコントローラーに適切な値を飛ばすフォームを自動生成するためのヘルパーです。新規作成用も編集用も共通のコードで運用できます。 * 入力された値の再表示 * フォームの`name`や`action`の自動設定 などを行っています。これらを行うためには、モデルの値が必要です(2)。 > > 1フォームというnameやemailなど1回表示すれば事足りる類のものに対して、for文のような繰り返しを意味するブロック構文を使う意味が分からない > > > ブロック構文は、必ずしも繰り返しを意味するものではありません。具体例としては、 * `File.open`にブロックをつけると、「ファイルを開く」→「ブロック内を実行する」→「ファイルを閉じる」というように、自動でファイルを閉じてくれる * `try`にブロックをつけると、「付けたものが`nil`でなければブロック内を実行し、値を返す」 そして、ビューで使うブロックは「繰り返し」以外に、「ブロックの中身でタグの内容を指定する」という動作になることもあります。