よしだです

プログラミングの勉強してます

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')ということですね。

 

すっきり〜。ほんと色んな機能がありますなあ。