将变量传递到局部3中?


140

我有这样的循环:

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

然后在中间部分,如何访问当前帖子?


您好Elliot我在标准脚手架上使用它。使用内部index.html.erb渲染_show.html.erb,其中show部分包含模态。一切正常,但是当我按show link时,它显示相同的ID,而不显示不同的ID。
学习者2015年

Answers:


237

试试这个:

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

这样,您将在局部对象中有一个局部变量post


18
您需要<%=%>而不是<%%>标签,否则它将无法呈现
Ryan

4
请记住,您需要<%= render 'middle', :post => post %>使用Rails 3.1.x
Archonic 2014年

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选项,真的很好。谢谢!
克劳迪奥·阿西亚雷西

11
请注意,使用Rails 3时不需要:locals哈希。参数哈希将转换为传递给局部变量的参数。
superluminary 2012年

4
我仍然需要:locals hash才能工作。.我正在运行3.2.12
mck

1
<%= render :partial => 'post', :collection => @posts, as: :post %>将自动遍历您的局部变量中的每个变量post,因此您可以post在局部变量中使用它作为变量。
ahnbizcad 2014年

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

现在,您可以在局部页面post中将post作为本地变量访问


10

替换<%= render middle %><%= render middle, :post => post %>。然后在您的middle局部视图中,可以访问post变量。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.