gpt4 book ai didi

ruby-on-rails - 优化搜索 RoR

转载 作者:行者123 更新时间:2023-11-29 11:45:15 25 4
gpt4 key购买 nike

我正在使用此搜索构建一个 RoR (rails 4) 项目,并在具有 bootstrap 3 样式的表格中显示。

  1. 我的下一个代码可以工作,但是太慢了。我希望这可以优化。
  2. 有没有办法在页面中间显示加载?

我是 RoR 的新手,我的英语不是很好。对此我感到很抱歉。请帮我!感谢一切!

<div class="panel panel-primary">
<div class="panel-body">
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>Grado</th>
<% meses = ((@cargo_total_grado.fecha_inicio)..@cargo_total_grado.fecha_final).map {|d| [d.strftime('%b'), d.year]}.uniq %>
<% meses.each do |m| %>
<th> <%= m.first + " " + m.second.to_s %> </th>
<% end %>
<th>Total</th>
</tr>
</thead>
<tbody>
<% @cursos.each do |curso| %>
<% alumnos = Alumno.select("id").where(:id => curso.alumno_ids) %>
<tr>
<td><small><%= curso.id_curso %></small></td>
<% total = 0 %>
<% meses.each do |m| %>
<% inicio = (m.second.to_s + m.first.to_s + "-01").to_date %>
<% final = inicio.next_month %>
<% mes = alumnos.map { |e| e.planes.map {|r| r.cargos.where("fecha_cargo >= ? AND fecha_cargo < ?", inicio, final).sum(:monto)}.sum }.sum %>
<% total += mes %>
<td><small> <%= number_to_currency(mes) %> </small></td>
<% end %>
<th><small><%= number_to_currency(total) %></small></th>
</tr>
<% end %>
<tr>
<th></th>
<% totales = 0 %>
<% meses.each do |m| %>
<% inicio = (m.second.to_s + m.first.to_s + "-01").to_date %>
<% final = inicio.next_month %>
<% mes_total = @cursos.map { |c| c.alumnos.map { |e| e.planes.map {|r| r.cargos.where("fecha_cargo >= ? AND fecha_cargo < ?", inicio, final).sum(:monto)}.sum }.sum }.sum %>
<% totales += mes_total %>
<th><small> <%= number_to_currency(mes_total) %> </small></th>
<% end %>
<th><small><%= number_to_currency(totales) %></small></th>
</tr>
</tbody>
</table>
</br>
</div>

最佳答案

所以您的问题是您的 SQL 调用太多了。 Rails 需要为每一个导致速度下降的问题查询数据库。

你应该看看Eager Loading为了解决这个问题,通常称为 N + 1 查询问题

Active Record lets you specify in advance all the associations that are going to be loaded. This is possible by specifying the includes method of the Model.find call. With includes, Active Record ensures that all of the specified associations are loaded using the minimum possible number of queries.

例如,您似乎要将多个类(class)加载到您的 @cursos 对象中,然后让加载多个 Alumno 对象然后加载 Cargo对象。这将导致对数据库的多次调用。而不是在你的模型中,你可以做这样的事情:

@cursos = Curso.includes(alumnos: [:cargos]).all

对于你回答的第二部分,是否可以显示加载动画:
是的,你可以,但是你必须使用 AJAX 调用才能从你创建的返回所需信息的其他路由加载信息。它并不太复杂,但它确实给应用程序增加了一点复杂性。 Take a look at this if you're interested .

附言Parece que hablas español? Si hay algo que no entiendes puedo explicártelo por chat, solo me avisas cuando tengas tiempo.

关于ruby-on-rails - 优化搜索 RoR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30145694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com