我正在使用Rails 5和Flash。 这是我控制器中的一个方法。 由于要处理大量数据,无论数据库调整,查询都需要大约10-15秒才能执行。 在将@result移交给具有相同名称的视图之前,我希望有一条flash消息告诉“Processing ...”。
def monthly_measurements
if user_signed_in?
@query = "
SELECT to_char(scheduled_on, 'yyyy-mm') as year_month,
get_measurements_count_by_year_month(to_char(scheduled_on, 'yyyy-mm'),NULL) as monthly_total,
get_measurements_count_by_year_month(to_char(scheduled_on, 'yyyy-mm'),'Completed') as monthly_completed,
get_measurements_count_by_year_month(to_char(scheduled_on, 'yyyy-mm'),'Not Completed') as monthly_not_completed
FROM measurements
GROUP BY year_month
ORDER BY year_month DESC;
"
@result = Measurement.connection.execute(@query)
else
flash[:alert] = "Not signed in"
redirect_to root_url
end
end
答案 0 :(得分:0)
我通过显示中间消息" Processing ..."解决了这个问题。不再需要通过按数量级减少控制器查询处理时间。
我通过添加类型为text的列measurements
来对year_month
表进行非规范化。该列填充了每个相应表行的yyyy-mm
的{{1}}部分。列scheduled_on
已编入索引。
表year_month
中的记录总数为120K +
我在所有功能中也根据需要进行了替换,并使用measurements
查询to_char(scheduled_on, 'yyyy-mm')
的出现次数。
一切(所有相关的报道)现在都是完美的,只需一秒钟。