質問: User.find_by(id: params[:id]) end ``` ※edit.html.erb内 ``` <%= form_tag("/users/#{@user.id}/update") do %> ``` 質問が3つあります。 1.コントローラー内の@userにはidのみが代入されているのでしょうか? 2.コントローラー内のUserはどこのUserを指定しているのでしょうか?(多分このコードの中にはないですが、言葉で説明できるようなことだったら教えて欲しいです。) 3.仮にコントローラー内の@userにidが代入されているのだとすれば、edit.html.erb内のURLに#{@user.id}のidが入る理由がわからないです。 私は、ルーティング→コントローラー→edit.html.erbの順番で書いています。書き方がおかしいので、3のような疑問が出て来るのでしょうか? 部分回答でも構いませんので、お分かりの方、教えて下さい。
回答: maisumakun さんの回答で間違いないのですが それぞれ何をしているのか考えれば理解も深まるかと ``` # routes.rb get "users/:id/edit" => "users#edit" ``` ここのURL中の`:id`とは`:id`というキーワードで参照できるオールマイティーな箱みたいなものです。 なんでも入ります。`params[:id]`で現在のURLの`:id`に該当する値が取れます。基本的には数字が入るので ``` # controller.rb def edit @user = User.find_by(id: params[:id]) end ``` と書くことでUserテーブルの中から`id`が`params[:id]`と同じユーザーを探すことができます。 そのユーザーの情報が`@user`に格納されているわけです。 ``` <%= form_tag("/users/#{@user.id}/update") do %> ``` ここでの`@user.id`は最初に述べた`:id`という箱に入る値になります。 `@user`のままではユーザー情報が丸々入ってしまいます。 基本的にはユーザーIDの数値だけが欲しいので `@user.id`とすることでユーザー情報のIDの値のみを入れているわけです。 送信した後はまた最初と同じですね。