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