render から変数を渡す方法

render は部分テンプレートを呼び出すことができます。
次のコードは、同フォルダ内にある _hoge.html.erb を呼び出します。

<%= render "hoge" %>

ウェブサイト上では、hogeページが埋めこまれている様に表示されます。
で、誤解をしていたのですが、render はメソッドや関数みたいなモノらしいです。

main.html.erb

<% @Mains.each do | main| %>
 <%= render "hoge" %>
<% end %>

_hoge.html.erb

<%= main %>

とやっても _hoge.html.erb は 「main なんてローカル変数知らない」というわけです。
表示は埋め込みされいるように見えるため、C言語の #define みたいなものかと勘違いしてました。

では、どうやって _hoge.html.erb で main という変数を使えるようにすればいいかというと・・・、メソッドや関数のように引数として渡してあげればいいんです。
書き方は

main.html.erb

<% @Mains.each do | main| %>
 <%= render "hoge", val: main %>
<% end %>

_hoge.html.erb

<%= val %>

で、ローカル変数である main が _hoge.html.erb で val と言う名前で使えるようになります。


render は、引数として部分テンプレート名や、変数名だけでなく、オブジェクトも書くことができます。
変数は、ローカル変数やハッシュ、配列なども可能です。
オブジェクトについては・・・よくわかりませんでした。
まだまだ、勉強中。