Rails AJAX 销毁 - 重新渲染索引问题

Rails AJAX Destroy - Re-render index issues

本文关键字:新渲染 索引 问题 AJAX 销毁 Rails      更新时间:2023-09-26

>我在使用Rails AJAX应用程序时遇到了一个问题,这让我感到困惑,尽管它看起来很简单!我正在一个简单的销售点轨道应用程序中处理class Order。正在提出请求,因为订单将在页面刷新时删除(但我没有得到@orders刷新(,因为我认为我在 destroy.js.erb 中指定了.

orders/index.html

<div id="orders">
    <%= render 'orders/index' %>
</div>
<%= link_to 'New Order', new_order_path, remote: true %>
<div id="order-form" style="display:none;"></div>

orders/_index.html

<% if @orders.any? %>
    <% @orders.each do |order| %>
        <%= link_to "Show #{order.id}", order_path(order), class: "something" %>
        <%= link_to "Delete #{order.id}", order_path(order), method: :delete, class: "something" %>
        <%= link_to "Delete order with ajax", order_path(order), remote: true, method: :delete %>
    <% end %> 
<% else %>
    <p>No orders yet</p>
<% end %>

销毁.js.erb

//When deleting order on order index - render orders again.
$('#orders').html("<%= j (render 'orders/index') %>");

以及orders_controller.rb的相关行动

class OrdersController < ApplicationController
  respond_to :html, :js
    def index
        @orders = Order.paginate(page: params[:page])
    if params[:search]
      @orders = Order.search(params[:search]).order("created_at DESC")
    else
      @orders = Order.all.order('created_at DESC')
    end
  end
  def destroy
    @order = Order.find(params[:id])
    if @order.destroy
      flash[:notices] = ["Order was successfully deleted"]
      redirect_to orders_path
    else
      flash[:notices] = ["Order could not be deleted"]
      render order_path(@order)
    end
  end

我怀疑问题出在我的orders_controller销毁或索引操作中,但我对在 Rails 中使用 AJAX 的一些方法有点不清楚。

链接到存储库 - https://github.com/benhawker/point-of-sale-rails

可能是

因为在销毁后,您将重定向到索引路径

我没有得到刷新@orders

您的JS可能未触发,您需要以下各项:

def destroy
  @order = Order.find params[:id]
  respond_to do |format|
    if @order.destroy 
      format.js
      format.html { redirect_to orders_path, notice: "Order was successfully deleted" }
    else
      format.js
      format.html { render order_path(@order), notice: "Order could not be deleted" }
    end
  end
end

这将触发app/views/orders/destroy.js.erb,这在您的 OP 中似乎没问题。

尝试将销毁操作更新为

@order = Order.find(params[:id])
@order.destroy
@orders=Order.all

删除所有重定向会工作。