使用 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>0x8656b6a8>以上是关于使用 ajax 显示查询的记录结果的主要内容,如果未能解决你的问题,请参考以下文章
sql查询:使用内连接查询两张表的时候,如果左边表的一条记录对应了右边表的两条记录,结果显示排列问题