使用jQuery更新多个对象

时间:2013-09-15 12:58:11

标签: javascript jquery ruby-on-rails

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

用户/ 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中单独引用它们有关?

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

2 个答案:

答案 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的父变量?