如何在呈现页面之前显示Flash消息,而控制器需要一些时间来处理

时间:2016-11-16 12:51:46

标签: ruby-on-rails

我正在使用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

1 个答案:

答案 0 :(得分:0)

我通过显示中间消息" Processing ..."解决了这个问题。不再需要通过按数量级减少控制器查询处理时间。

我通过添加类型为text的列measurements来对year_month表进行非规范化。该列填充了每个相应表行的yyyy-mm的{​​{1}}部分。列scheduled_on已编入索引。

year_month中的记录总数为120K +

我在所有功能中也根据需要进行了替换,并使用measurements查询to_char(scheduled_on, 'yyyy-mm')的出现次数。

一切(所有相关的报道)现在都是完美的,只需一秒钟。