我有一个这样的循环:
<% @posts.each do |post| %>
<% render middle %>
<% end %>
然后在我的中间部分,如何访问当前帖子?
答案 0 :(得分:236)
试试这个:
<% @posts.each do |post| %>
<%= render 'middle', :post => post %>
<% end %>
像这样,你将在部分内部提供一个局部变量post
。
答案 1 :(得分:124)
将其作为局部变量赋予部分
<%= render :partial => 'middle', :locals => { :post => post } %>
当然,rails也有渲染集合的快捷方式:
<%= render :partial => 'post', :collection => @posts %>
在这种情况下,它将使用局部变量'post'
为每个帖子调用部分帖子您甚至可以在每个帖子之间渲染间隔模板:
<%= render :partial => 'post', :collection => @posts, :spacer_template => 'post_divider' %>
答案 2 :(得分:14)
<% @posts.each do |post| %>
<% render middle, :post => post %>
<% end %>
您现在可以在部分
中访问帖子作为本地变量post
答案 3 :(得分:10)
将<%= render middle %>
替换为<%= render middle, :post => post %>
。然后在middle
部分中,您可以访问post
变量。
答案 4 :(得分:0)
你可以用这个替换整个每个块:
<%= render partial: "product", collection: @posts %>
或者更短:
<%= render @posts %>
完整文档(第 3.2 节) https://guides.rubyonrails.org/action_view_overview.html