我有一个个人资料页面,我使用部分代码呈现所有用户列表:
用户/ show.html.erb
<%= render @lists %>
对于每个列表,我显示了多少愿望:
列表/ _list.html.erb
<p class="muted" id="wishes_count"><%= pluralize(list.wishes.count, "wish") %></p>
我正在使用拖放功能允许用户使用jQuery sortable将愿望从一个列表移动到另一个列表。
现在,我正在使用以下代码:
wishes.js.erb
$(document).ready(function(){
$('.user_list_wishes').sortable({
connectWith: ".user_list_wishes",
items: ".user_list_wish",
placeholder: "sortable_placeholder",
update: function(e, ui)
{
if (this === ui.item.parent()[0])
{
item_id = ui.item.data('item-id');
list_id = $(this).data('list-id');
position = ui.item.index();
$.ajax({
type: 'POST',
url: $(this).data('update-url'),
dataType: 'json',
data: { id: item_id, wish: { row_order_position: position, list_id: list_id } }
}),
$("#wishes_count").html('<%= pluralize(list.wishes.count, "wish") %>')
}
}
})
})
这行代码:
$("#wishes_count").html('<%= pluralize(list.wishes.count, "wish") %>')
让我的应用程序抛出NoMethodError
undefined method 'wishes' for nil:NilClass
我认为这与我如何渲染列表并在我的javascript中单独引用它们有关?
非常感谢有关如何解决此问题的任何建议!
答案 0 :(得分:0)
您必须使用以下条件处理list
为空的方案:
$("#wishes_count").html('<%= pluralize(list ? list.wishes.count : 0, "wish") %>')
答案 1 :(得分:0)
我认为问题可能出在render
来电中 - 根据documentation:
如果要将模型实例渲染为局部,则可以使用简写语法:
<%= render @customer %>
假设@customer实例变量包含Customer模型的实例,这将使用_customer.html.erb来呈现它,并将局部变量customer传递给partial,它将引用@customer中的@customer实例变量。父母观点。
因此请检查是否是这种情况 - 您是否有一个名为_lists.html.erb
的部分名为list
的父变量?