0

我有一个个人资料页面,我在其中使用部分呈现所有用户列表:

用户/show.html.erb

<%= render @lists %>

对于每个列表,我会显示相关联的愿望数量:

列表/_list.html.erb

<p class="muted" id="wishes_count"><%= pluralize(list.wishes.count, "wish") %></p>

我正在使用拖放来允许用户使用 jQuery 可排序将愿望从一个列表移动到另一个列表。

现在,我正在使用以下代码:

愿望.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 中单独引用它们有关?

非常感谢任何有关如何解决此问题的建议!

4

2 回答 2

0

list您必须使用以下条件处理为 null 的场景:

$("#wishes_count").html('<%= pluralize(list ? list.wishes.count : 0, "wish") %>') 
于 2013-09-15T13:05:47.287 回答
0

我认为问题可能出在您的render电话中-根据文档

如果您有要渲染为部分模型的实例,则可以使用简写语法:

<%= render @customer %>

假设 @customer 实例变量包含 Customer 模型的实例,这将使用 _customer.html.erb 来呈现它,并将局部变量 customer 传递到将引用父视图中的 @customer 实例变量的部分。

因此,请检查是否是这种情况-您是否有一个名为的部分_lists.html.erb变量和一个名为的父变量list

于 2013-09-15T13:50:33.833 回答