使用 ajax 显示查询的记录结果

Posted

技术标签:

【中文标题】使用 ajax 显示查询的记录结果【英文标题】:Show a record result of a query using ajax 【发布时间】:2017-09-14 12:54:46 【问题描述】:

我正在使用一个涉及两个表的查询来显示视图中的记录,在修改该记录时,我使用 ajax 通过将“Remote True”添加到表单并在控制器中的编辑操作中添加“格式。 Json“并创建一个 update.js.erb 文件,我在更新注册表后呈现我的注册表以显示它更新视图。我的问题是记录是查询的结果,并且在视图中使用 ajax 呈现它时,它没有获取查询的结果。

使用 ajax 如何呈现查询结果?

我的索引操作:

@search_liberados = Pedidoliberado.proceso_pedidos_lib.search(search_params)

@search_liberados.sorts = 'Pza desc' if @search_liberados.sorts.empty?
@pedidosliberados = @search_liberados.result().page(params[:pedidosliberados]).per(15)

这是我的看法

  <tbody id="container_pedidosliberados">
            <%= render @pedidosliberados %><!--carga todos los productos-->
  </tbody>

我的部分_pedidoliberado:

<tr id="pedidoliberado_<%= pedidoliberado.id %>">
  <td class="component_name_body_col"><%=pedidoliberado.TOTAL%></td>
  <td class="component_name_body_col">
    <%= form_for(pedidoliberado, :method => :put, remote: true, :url => :controller =>'pedidosliberados', :action => 'update', :id => pedidoliberado.ID, html: class: "form-horizontal ") do |f| %><!--ajax-->

      <%= f.hidden_field :STATUS %>

        <%= submit_tag "save", class: "btn btn-primary Entregar", data:  disable_with: 'Actualizando' %>

    <% end %>
  </td>
</tr>

我的查询:

  def self.proceso_pedidos_lib
    query = select("[pedidosliberados].PEDIDO AS Pedido, SUM([detalle].IMPORTE) AS IMPORTE, SUM([detalle].IVA) AS IVA, SUM([detalle].IMPORTE) + SUM([detalle].IVA) AS TOTAL")
            .joins('inner join detalle ON pedidosliberados.PEDIDO = detalle.PEDIDO ')
    query
  end

我的编辑操作:

  def update
    respond_to do |format|
      if @pedidoliberado.update(pedidoliberado_params)
        format.html  redirect_to @pedidoliberado, notice: 'Pedidoliberado was successfully updated.' 
        format.json  render :show, status: :ok, location: @pedidoliberado 
        format.js flash.now[:notice] = 'saved.' #ajax
      else
        format.html  render :edit 
        format.json  render json: @pedidoliberado.errors, status: :unprocessable_entity 
        format.js flash.now[:alert] = 'Error.' #ajax
      end
    end
  end

我的 update.js.erb:

$("#pedidoliberado_<%= @pedidoliberado.id %>").fadeOut(500, function()
  $(this).remove();
  $("#container_pedidosliberados").prepend('<%= j render @pedidoliberado %>');

);
$("#notice").html("<%= escape_javascript(render :partial => 'partials/flash' , :locals =>  :flash => flash ).html_safe %>");

setTimeout(function()
  $('#notice').fadeIn("slow", function() 
    $(this).create();
  )
, 1500);

【问题讨论】:

您是否尝试在编辑操作中删除 format.html 行? @VineethSubbaraya 感谢您的回答,是的,但它仍然向我显示了没有查询结果的记录 您能解释一下搜索功能在索引操作中的作用吗?你是想把它放在那里吗? @VineethSubbaraya 搜索功能只是使用宝石 kaminari 和 ransack 进行分页和搜索,它们工作正常 能否请您检查一下您的浏览器控制台是否出现任何错误?并尝试使用 pry 调试器检查您的函数是否返回正确的结果 【参考方案1】:

您没有在更新操作中运行查询。除非您在更新操作中运行,否则查询的参数将不可用。您还编写了一个类方法,该方法不适用于实例(个人记录)

def self.proceso_pedidos_lib
    query = select("[pedidosliberados].PEDIDO AS Pedido, SUM([detalle].IMPORTE) AS IMPORTE, SUM([detalle].IVA) AS IVA, SUM([detalle].IMPORTE) + SUM([detalle].IVA) AS TOTAL")
        .joins('inner join detalle ON pedidosliberados.PEDIDO = detalle.PEDIDO ')
    query
end

您必须运行以下命令才能获取 IMPORTE 等连接字段。

  @pedidoliberado.proceso_pedidos_lib

【讨论】:

非常好,但该行再次显示查询的所有记录,包括已经修改和未修改的记录,有没有办法只显示修改的记录? 更新后尝试运行“@pedidoliberado.proceso_pedidos_lib”。这应该运行该特定记录的查询。 那一行我得到这个错误:NoMethodError (undefined method `proceso_pedidos_lib' for #<0x8656b6a8>

以上是关于使用 ajax 显示查询的记录结果的主要内容,如果未能解决你的问题,请参考以下文章

sql查询:使用内连接查询两张表的时候,如果左边表的一条记录对应了右边表的两条记录,结果显示排列问题

记录为空时,Access 2010 查询仍显示结果

由 SQL 完成的查询多次显示相同的结果(查询中同一记录的多个副本)

SQL中显示查询结果的前几条记录

SQL如何显示查询结果的前100条?

如果查询结果在 BigQuery 中没有记录,则显示默认值