使用AJAX的Ruby on Rails更新列表中断了顺序

时间:2015-10-03 08:30:29

标签: javascript jquery ruby-on-rails ajax

我按特定顺序列出了元素。问题是当我用AJAX更新任何元素时,这个元素会跳到列表的底部。当我重新加载页面时,它返回正确的位置。我更喜欢这个元素在更新时留在原地。

清单:

<div class="shopping-cart">
  <%= render "shopping_cart" %>
</div>

_shopping_cart.html.erb:

<% @order_items.each do |order_item| %>
    <%= render 'carts/cart_row', order_item: order_item %>
<% end %>

_cart_row.html.erb:

<%= form_for order_item, remote: true do |f| %>
    <%= f.number_field :quantity, class: "form-control cart-quantity" %>
    <%= f.submit "Submit", class: "btn" %>
<% end %>

update.js.erb:

$(".shopping-cart").html("<%= escape_javascript(render 'carts/shopping_cart') %>")

为什么会这样?谢谢。

更新

控制器代码:

@order_items = current_order.order_items.order("created_at ASC")

并且没有任何AJAX代码,所有都在这里,因此没有其他排序标准。

1 个答案:

答案 0 :(得分:0)

由于缺乏答案,我会给你一个想法......

-

首先,您必须记住,使用Ajax调用时,问题是 将成为Ajax的附加,或者使用Rails&#39;数据。

我立即假设您的问题是您只是将新数据附加到您的观看中。你已经完成了你的代码;这可能是您的@order_items数组的问题。

这就是我要做的事情:

update.js.erb:
$(".shopping-cart").html("<%=j render 'carts/shopping_cart' %>")

_shopping_cart.html.erb:
<% render 'carts/cart_row', collection: @order_items, as: :order_item %>

控制器代码:

@order_items = current_order.order_items.order :created_at

没有区别?

不确定。

调试方式如下:

  1. 检查@order_items对象(使用浏览器开发控制台中的network标签)或Rails记录器
  2. 检查JS是否对数据做了愚蠢的事情。如果数据正确排序,则应根据需要附加数据。