2014-09-03 63 views
0

我呈现从提供的视图部分:导轨部分呈现给未定义的方法无:NilClass

<%= 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变量做任何事情。我得到 为无未定义的方法:NilClass:

<tr> 
    <td><%= parent_offer.created_at %></td> 
    <td><%= parent_offer.version %></td> 
    <td><%= parent_offer.client.try(:name) %></td> 
    <td> 
    ............ 

我在做什么错? 谢谢!

回答

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

此外,您应该确保部分使用的变量名符合要渲染的集合的'model_name'。 – 2014-09-03 09:17:28

+0

@ IS04这两个解决方案我现在得到未定义的局部变量或方法'parent_offer' – 2014-09-03 09:25:07

+0

(固定),如果你需要'parent_offers'只是改变'集合'它 – IS04 2014-09-03 09:27:29

1

收集

<%= render partial: "parent_offer", collection: parent_offers, as: :parent_offer %> 

虽然collection部分渲染功能确实令人惊叹,但我们发现它有一个主要缺点,因为它很难管理您在部分本身中调用的object

如果你调用自己的对象的名字,你会是最好的use the as: argument定义局部变量:

内的部分使用自定义局部变量名,指定 :作为选项在调用部分:

<%= render partial: "product", collection: @products, as: :item %>

随着这一变化,您可以访问@products 集合的实例为内部分项目本地变量。

相关问题