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