我从优惠视图中呈现部分内容:
<%= render partial: 'parent_offers_table', locals: { :parent_offers => [offer.parent_offer] } %>
然后,在_parent_offers_table中:
<%= render partial: 'parent_offer', collection: parent_offers %>
但是,在_parent_offer中,我无法对parent_offer变量执行任何操作。我明白了 nil的未定义方法:NilClass:
<tr>
<td><%= parent_offer.created_at %></td>
<td><%= parent_offer.version %></td>
<td><%= parent_offer.client.try(:name) %></td>
<td>
............
我做错了什么? 谢谢!
答案 0 :(得分:1)
代替:
<%= render partial: 'parent_offer', collection: parent_offers %>
尝试:
<%= render partial: 'parent_offer', locals: {parent_offers: parent_offers} %>
或:
<%= render 'parent_offer', parent_offers: parent_offers %>
答案 1 :(得分:1)
<强>集合强>
<%= render partial: "parent_offer", collection: parent_offers, as: :parent_offer %>
虽然collection
部分渲染功能真的很棒,但我们发现它有一个主要缺点,因为它很难管理你在部分内部调用的object
。< / p>
如果您要调用自己的对象名称,最好use the as:
argument定义本地变量:
要在partial中使用自定义局部变量名,请指定 :作为调用partial的选项:
<%= render partial: "product", collection: @products, as: :item %>
通过此更改,您可以访问@products的实例 集合作为部分内的项局部变量。