将变量传递给部分轨道3?

Ell*_*iot 139 ruby ruby-on-rails ruby-on-rails-3

我有这样的循环:

<% @posts.each do |post| %>
  <% render middle %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

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

pol*_*lau 236

试试这个:

<% @posts.each do |post| %>
  <%= render 'middle', :post => post %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

像这样你将在局部变量中有一个局部变量post.

  • 您需要<%=%>而不是<%%>标签,否则它将无法呈现 (18认同)
  • 请记住,对于rails 3.1.x,你需要`<%= render'middle',:post => post%>` (4认同)

Ste*_*man 124

将它作为局部变量赋予partial

<%= render :partial => 'middle', :locals => { :post => post } %>
Run Code Online (Sandbox Code Playgroud)

当然,rails还有一个呈现集合的快捷方式:

<%= render :partial => 'post', :collection => @posts %>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,它将使用局部变量'post'为每个帖子调用部分帖子

您甚至可以在每个帖子之间渲染间隔模板:

<%= render :partial => 'post', :collection => @posts, :spacer_template => 'post_divider' %>
Run Code Online (Sandbox Code Playgroud)

  • 不知道:spacer_template选项,非常好.谢谢! (14认同)
  • 请注意,使用Rails 3时不需要:locals哈希.参数哈希转换为传递给partial的参数. (11认同)
  • 我仍然需要:本地人哈希它工作..我正在运行3.2.12 (4认同)

Fel*_*sen 14

<% @posts.each do |post| %>
  <% render middle, :post => post %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

您现在可以访问post作为postpartial中的局部变量


sev*_*cat 10

替换<%= render middle %><%= render middle, :post => post %>.然后在您的middle部分中,您可以访问该post变量.