renderに@○○を渡したときの動作について
railsでまたいまいち理解できないところにつまづきました。
<%= render @products %>
というコード。
これは、
<%= render partial: 'products/product', collection: @products %>
を略して書いたコードなんですが、なんでここまで略せるのかがよく理解できませんでした。
なんで変数を渡しただけでpartialの場所まで指定できるんだ・・・?
と、思い色々テストしてみました。
まず疑問①'_product.html.erb'が別のフォルダに入ってたらどうなるの?
とりあえず別のフォルダに入れてリロードすると、MissingTempleteErrorが出ました。おお。
@productsと同じ名前のフォルダに探しにいくようです。(この場合は'views/products')
疑問②ファイル名も'products'(複数形)にしても平気?
正直①でだいたい納得したんですが一応これも調べておきます。
最後にsをつけてリロードしてみると、やはりMissingTempleteErrorが。
疑問③フォルダ名を'product'(単数形)にしたら?
さらにもういっちょ。
フォルダ名を変更してリロード・・・。
MissingTempleteErrorです。
つまり、<%= render @products %>というような省略形を使うと
まず、与えられた変数と同じ名前のフォルダを探しにいき(この場合は'views/products')
フォルダが見つかれば、与えられた変数の単数系のファイルを探す(この場合は'views/products'の中の'product.html.erb')ということですね。
すっきり〜。ほんと色んな機能がありますなあ。