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