2016-11-16 2 views
0

Я использую Rails 5 и Flash. Вот мой метод. Запрос занимает около 10-15 секунд для выполнения независимо от настройки db из-за большого количества обрабатываемых данных. Я хочу, чтобы флеш-сообщение сообщало что-то вроде «Обработка ...» до того, как @result передается в представление с тем же именем, которое будет отображаться.Как показать флеш-сообщение перед отображением страницы, пока контроллер занимает некоторое время, чтобы обработать

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

вы можете добавить загрузчик ajax, говорящий о загрузке ... –

+0

Для отображения сообщения «загрузка» вам необходимо использовать JavaScript и одновременно сделать асинхронный запрос на конечную точку 'month_measurements'. Хорошим местом для начала будет чтение о создании асинхронных запросов с использованием JavaScript (ajax): http://guides.rubyonrails.org/working_with_javascript_in_rails.html#an-introduction-to-ajax – james246

+0

Есть ли другой способ сделать это без AJAX ? –

ответ

0

Я решил эту проблему путем отображения промежуточного сообщения «Processing ...» больше нет необходимости за счет сокращения времени обработки запроса контроллер с на порядок.

Я денормализовал таблицу measurements, добавив столбец year_month текста типа. Колонка заполнена частью yyyy-mm из scheduled_on каждой соответствующей строки таблицы. Столбец year_month индексируется.

Общее количество записей в таблице measurements является 120K +

я заменил также по мере необходимости во всех функциях и запрашивает возникновение to_char(scheduled_on, 'yyyy-mm') с year_month.

Все (все связанные отчеты) теперь работает идеально и в расколе секунды.

Смежные вопросы