使用Collection @Array和Object @Item渲染部分

时间:2014-11-21 17:13:52

标签: ruby-on-rails

我在尝试这样做时遇到NilClass错误

 $("#profile-list").html("<%= escape_javascript(render partial: 'partial', collection: @items, object: @item) %>");

部分错误:@item是nill

我的所有代码部分使用 @item ,这就是为什么我需要从 @items 的数组中发送单个 @item 的原因。

注意:我检查@items数组不为空。

1 个答案:

答案 0 :(得分:0)

简短回答:您无法以您尝试的方式控制实例变量。您可以做的最好的事情是控制局部变量的名称,如下所示:

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

您的部分人员可以访问名为something_else的本地变量,而不是item,这是正常的。但是,您不能使partial部分创建名为@item@something_else的实例变量。

从技术上讲,partials可以访问整个视图环境中的所有实例变量。因此,如果您手动创建一个@items(或@item,则可以访问@item。然而,这种方法过分且不必要地复杂和冗长(当有更短的备选方案时),因为您需要手动迭代集合,设置@item变量,并呈现指定的部分。

强烈推荐的方法是简单地改变部分,并将item的所有实例更改为$("#profile-list").html("<%= escape_javascript(render partial: 'partial', collection: @items) %>"); 。请记住,partials应该能够独立存在,而不依赖于调用环境设置的实例变量的存在。

您的渲染线应如下所示:

{{1}}