【问题标题】:Pass a variable into a partial, rails 3?将变量传递给部分,rails 3?
【发布时间】:2011-06-09 16:39:15
【问题描述】:

我有一个这样的循环:

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

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

【问题讨论】:

  • 你好 Elliot 我在标准脚手架上使用它。使用内部 index.html.erb 渲染 _show.html.erb 其中显示部分包含模式。一切正常,除了当我按下显示链接时,它显示相同的 id 而不是显示不同的 id。

标签: ruby-on-rails ruby ruby-on-rails-3


【解决方案1】:

试试这个:

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

像这样,您将在部分中获得一个局部变量 post

【讨论】:

  • 你需要 而不是 标签,否则它不会呈现
  • 请记住,对于 rails 3.1.x,您需要 &lt;%= render 'middle', :post =&gt; post %&gt;
【解决方案2】:

将其作为局部变量传递给部分

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

当然,rails 也有渲染集合的快捷方式:

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

在这种情况下,它将为每个带有局部变量“post”的帖子调用部分帖子

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

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

【讨论】:

  • 不知道 :spacer_template 选项,真的很好。谢谢!
  • 请注意,使用 Rails 3 时不需要 :locals 散列。参数散列被转换为传递给部分的参数。
  • 我仍然需要 :locals hash 才能工作。我正在运行 3.2.12
  • &lt;%= render :partial =&gt; 'post', :collection =&gt; @posts, as: :post %&gt; 将自动循环遍历您部分中的每个post,因此您可以使用部分中的post 作为变量。
【解决方案3】:
<% @posts.each do |post| %>
  <% render middle, :post => post %>
<% end %>

您现在可以在局部变量post 中访问帖子

【讨论】:

    【解决方案4】:

    &lt;%= render middle %&gt; 替换为&lt;%= render middle, :post =&gt; post %&gt;。然后在您的middle 部分中,您可以访问post 变量。

    【讨论】:

      【解决方案5】:

      你可以用这个替换整个每个块:

      <%= render partial: "product", collection: @posts %>
      

      甚至更短:

      <%= render @posts %>
      

      完整文档(第 3.2 节) https://guides.rubyonrails.org/action_view_overview.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-21
        • 1970-01-01
        • 1970-01-01
        • 2013-01-16
        • 1970-01-01
        • 2012-09-17
        • 2013-09-10
        • 2012-08-28
        相关资源
        最近更新 更多