質問: ### 自分が使っている教科書から引用 ``` <%= render 'relationships/follow_button', user: @user %> ``` ここではuserに@userを代入しているんですが、それをして何がしたいんですか?
回答: パーシャルではuserが何なのかわからないので@userがuserですと教えています 追記 **>なぜパーシャルだけはuserが何かわからないんですか?** userという変数はどこにも定義されていないからです。 **>それならパーシャルは@userのことはわかるみたい何ですが** **>パーシャルは何がわからなくて何がわかるんですか?** 定義され、受け渡されている変数だけがわかる(扱えます) @userはインスタンス変数なので、controllerからテンプレートへ渡っています。 なのでこれはパーシャルからも扱えます。 userはローカル変数なので、それが何なのかを示してあげないといけません。 なぜパーシャルからもインスタンス変数を参照できるのにわざわざローカル変数に代入しているのか説明します ``` <% @users.each do |user| %> <%= user.name %> <% end %> ``` 上記のようにインスタンス変数をパーシャルで扱ってしまうと、 同じ表示で、値だけ@postsを参照したものを実装したい時に ``` <% @posts.each do |post| %> <%= post.name %> <% end %> ``` 上記のような@posts専用のパーシャルをもう一つ作る必要があります。 これではパーシャルにして使いまわしをする、ということができず、 単純にコードをファイル分割しただけになります。 そこで以下のようにパーシャルではインスタンス変数ではなくローカル変数を参照するようにすると、 ``` <% items.each do |item| %> <%= item.name %> <% end %> ``` @usersを扱いたい時も、@postsを扱いたい時も、@animalsを扱いたい時も、 パーシャルの記述はそのままで、 render時に ``` <%= render 'index', items: @posts %> <%= render 'index', items: @users %> ``` として、ローカル変数に扱いたいインスタンス変数を代入するだけで一つのパーシャルを使いまわせます。