0

ユーザーが配信を確認できるページがあります (通知など)。そのページでは、X をクリックして単一の配信を削除できました。これは、次のコントローラー アクションにリンクされていました。

deliveryies_controller.rb

def destroy
  @id = params[:id]
  @delivery = Delivery.find(@id)
  @delivery.destroy
  respond_to do |format|
    format.js
  end
end

これにより、AJAX 経由で呼び出される次の js ファイルが呼び出されます。

destroy.js.erb

<% if @id %>
  $("#delivery<%= @id %>").hide('fast');
<% end %>
<% if current_user.deliveries_count == 0 %> # Used to be current_user.deliveries.empty?
  $(".delete, .close").hide('fast');
  setTimeout(function() {
  $("#message").fadeIn('slow');}
 ,300);
<% end %>

配送ラインが current_user.deliveries.empty だったのはいつですか? カウンターキャッシュはありませんでしたが、これはうまく機能します。最後の配信が削除された場合、空のメッセージが表示されます。しかし、カウンター キャッシュを追加すると (空の? 呼び出しを繰り返し、データベース ヒットを回避したかったため)、このコードは機能しなくなりました。私は空にしてみましたか?deliveryies_count、deliveries.size、その他いくつかのものがあります。

このコードを変更する必要さえありませんが、deliveries counter_cache を追加すると失敗します。JS ファイルは、配信数が本来よりも 1 多いことを確認します。誰かが理由を知っていますか?

4

0 に答える 0