変数を部分的なレール3に渡しますか?


140

私はそのようなループを持っています:

<% @posts.each do |post| %>
  <% render middle %>
<% end %>

次に、中間部分で現在の投稿にアクセスするにはどうすればよいですか?


こんにちはエリオット私はこれを標準の足場で使用しています。index.html.erbの内部を使用して、_show.html.erbをレンダリングします。show linkを押すと、異なるIDではなく同じIDが表示されることを除いて、すべてが正常に機能しています。
学習者、

回答:


237

これを試して:

<% @posts.each do |post| %>
  <%= render 'middle', :post => post %>
<% end %>

このpostようにして、パーシャル内で使用可能なローカル変数ができます。


18
<%%>タグではなく<%=%>が必要です。そうしないとレンダリングされません
Ryan

4
覚えておいてください、あなたは<%= render 'middle', :post => post %>レール3.1.x を必要とするでしょう
Archonic

124

ローカル変数としてパーシャルに与えます

<%= render :partial => 'middle', :locals => { :post => post } %>

もちろん、railsにはコレクションをレンダリングするためのショートカットもあります。

<%= render :partial => 'post', :collection => @posts %>

この場合、ローカル変数「post」を使用して、すべての投稿の部分的な投稿を呼び出します

各投稿の間にスペーサーテンプレートを表示することもできます。

<%= render :partial => 'post', :collection => @posts, :spacer_template => 'post_divider' %>

14
:spacer_templateオプションを知りませんでした。ありがとう!
Claudio Acciaresi、2011年

11
Rails 3を使用する場合、:localsハッシュは必要ないことに注意してください。引数ハッシュは、パーシャルに渡される引数に変換されます。
superluminary

4
それが機能するためには:localsハッシュが必要でした
。3.2.12を

1
<%= render :partial => 'post', :collection => @posts, as: :post %>postパーシャルのそれぞれを自動的にループするので、パーシャルでpost変数として使用できます。
ahnbizcad 2014年


10

交換してください<%= render middle %><%= render middle, :post => post %>。次に、middleパーシャルでpost変数にアクセスできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.