パーシャルにはローカル変数を。
課題を進めていく中で指摘されたこと。
それは"パーシャルにはインスタンス変数ではなくローカル変数を使う"ということです。
そもそもパーシャルの目的とは?
パーシャルの目的は出力を扱いやすく分割するための仕組み。
要するに、ビュー内のコードをいくつものファイルにして分割して書き出すことで、他のテンプレートでも使い回せるようにするため。
また、分割することで読みやすくなり使い勝手がよくなるんです!
なぜパーシャルにローカル変数?
それはインスタンス変数を使うと、コントローラとも結びつくため、結果としてパーシャルとして切り出したのに再利用制が低くなってしまうからだ。
具体的に書くと、
・controller側でインスタンス変数の名前や挙動も変更した時に、パーシャルもいちいち変更しなくてはならない。みたいな感じです。
良くない例としてはこんな感じ
show.html.erb
<%= render partial: "product/main_content" %>
_main_content.html.erb
<%= @product.name %>
じゃあどうやってやるの?
結論から書きます!
show.html.erb
<%= render partial: 'product/main_content', ①locals: { ②product: @product} %>
①ローカル変数名
②インスタンス変数名
*省略形(こっちで書けばいいよね)*
<%= render 'product/main_content', product: @product %>
_main_content.erb
<%= product.name %>
local変数に設定したため@productからproductというローカル変数が使えるようになった。
最後に
まだまだへっぽこな知識しかないけど新しい壁に当たって解決できた時に新しい知識が入ってきたり勉強を進めることで少しずつではあるけど知識が入り込んでくる。少しでも頭に詰め込んでそれを手で動かせるようになるまでどんどん頑張っていこう。
少し疲れた。everyday railsに取り組んでいるけどやっぱり読みやすい。頑張ろう。
おやすみ