我有一个User模型,每个用户has_many:Deliveries。我有一个名为_currentDeliveries的部分,它向用户显示有关每个交货的一些信息。
显示的每个Delivery都有一个删除按钮(现在只是一个小方块div),我正在使用Ajax,所以如果用户单击其中一个Deliver之后的删除按钮,那么该传递将被销毁从列表中删除(通过重新呈现部分)而不刷新页面。
我几乎按照我想要的方式工作,唯一的问题是当我点击一个交付的删除按钮时,它不会从列表中删除,直到我单击另一个交付的删除按钮。并且,在我单击第三个删除按钮之前,我删除的第二个传递不会从列表中删除,依此类推。
基本上,部分总是落后于应该的位置,这使我认为部分在交付完全删除之前呈现。
这是包含部分的div:
<div id="currentDeliveriesArea">
<%= render "currentDeliveries", user: @user %>
</div>
这是部分:
<% user.deliveries.each do |d| %>
<div class="deliveryBox">
<div class="deliveryBoxLeft">
<div class="editDeliveryButton">
</div>
</div>
<div class="deliveryBoxCenter">
<p class="deliveryTitleText">Delivery</p>
<p class="deliveryTimeText">
<% if d.minute > 9 %>
<% if d.am == 1 %>
<%= d.hour %>:<%= d.minute %> am
<% else %>
<%= d.hour %>:<%= d.minute %> pm
<%end%>
<% else %>
<% if d.am == 1 %>
<%= d.hour %>:0<%= d.minute %> am
<% else %>
<%= d.hour %>:0<%= d.minute %> pm
<%end%>
<%end%>
</p>
</div>
<div class="deliveryBoxRight">
<div class="deleteDeliveryButton" onclick="getDeleteDelivery(<%= d.id %>);">
</div>
</div>
</div>
这是在单击div“deleteDeliveryButton”时调用的javascript函数:
function getDeleteDelivery(delivery){
$.get("/deleteDelivery", {delivery: delivery})}
以下是users_controller中的deleteDelivery操作:
def deleteDelivery
@user = current_user
puts "made it to delete action"
@user.deliveries.each do |d|
puts "Delivery ID " + d.id.to_s
end
@delivery = params[:delivery]
puts "User deliveries count before: " + @user.deliveries.count.to_s
Delivery.find(@delivery).destroy
puts "User deliveries count after: " + @user.deliveries.count.to_s
respond_to do |format|
format.js
end
end
以下是从操作中调用并重新呈现部分的deleteDelivery.js.erb文件:
$("#currentDeliveriesArea").html("<%= j(render partial: 'currentDeliveries', locals: {user: @user}) %>");
如果我在每次删除按钮后刷新页面,每次都会从列表中删除交付,但由于某种原因,Ajax似乎落后于1次。控制台说完全删除了交付,并且@ user.deliveries.count少了一个,然后才会显示_currentDeliveries,然后呈现deleteDelivery.js.erb,所以我不确定是怎么回事。
对bpm的错误命名约定感到抱歉!