Как немедленно отобразить флэш-сообщение из метода контроллера - PullRequest
0 голосов
/ 22 марта 2012

flash.now [: class] должен работать не так, как, например, flash.keep [: class] , но мне это не кажется.У меня есть flash.keep сообщений, работающих по всему моему приложению jRuby / Rails, но теперь я хочу немедленно отобразить сообщение, чтобы убедить пользователя, что я работаю над выполнением запроса ДО мой метод контроллера перенаправляет.Почему flash.now не работает таким образом?Я уже следовал этому с инструкцией render , но это не разрешено, если у вас также есть redirect_to в другом месте в вашем методе контроллера, который мне нужен для возврата к основному виду.Если нет flash.now , то что мне использовать, или то, что я пытаюсь сделать, просто невозможно в Rails?

Код контроллера не намного больше, чем показано выше:

 flash.now[:info] = '* * * Working hard to fulfill your request... * * *'
 render :action => 'index'

Я добавил инструкцию рендер в попытке сделать flash.now flash сейчас , нопрепроцессору не понравилось, что у меня и рендер и redirect_to в одном методе.Мне нужно redirect_to дальше как часть нормального и типичного дизайна моего приложения RESTful.

Но главное, что flash.now делает не мигать сейчас.Так чем же он отличается, например, flash.keep или просто flash ?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2014

Да, вы можете перенаправить на ИЛИ только один раз в каждом действии.

Почему бы вам просто не использовать это вместо

render :action => 'index', :notice => '* * * Working hard to fulfill your request... * * *'

или

flash[:notice] = '* * * Working hard to fulfill your request... * * *'
render :action => 'index'
0 голосов
/ 24 марта 2012

Не используйте flash.now.Вы упоминаете, что вы redirect_to в этом действии, и flash.now появляется только тогда, когда вы render (разница в том, что redirect_to приводит к целому «другому HTTP-запросу» и, таким образом, другому действию; flash.now - отображается только в текущем действии ).

Поэтому, если вы хотите, чтобы это сообщение отображалось после завершения обработки, просто используйте флэш-память как обычно.

Если вы хотитесделать это в два этапа, хотя (сообщение с подтверждением при получении HTTP-запроса, а затем перенаправление, когда он завершает обработку), это сложнее.Вы не можете создать два HTTP-ответа для одного HTTP-запроса, поэтому вам придется подделать его с помощью JavaScript.

Я предполагаю, что поскольку ваше действие занимает достаточно много времени, чтобы обработать его, необходимоСообщение «Все еще работает ...», это результат отправки формы.Поэтому создайте обработчик событий отправки формы, который отображает ваше сообщение (и / или заменяет кнопку отправки на «рабочий» значок - это не позволяет нетерпеливым пользователям подключить ваш сервер (и, возможно, сломать их данные), принудительно отправляя их снова и снова).Это позволяет вашим пользователям знать, что вы действительно получили их запрос и работаете над ним *.Затем, когда ваше действие завершится, просто перенаправьте или выполните рендеринг, как обычно.

Надеюсь, это поможет!

* Поскольку это просто функция JavaScript, она не знает что сервер действительно получил ответ, но это один из тех случаев, когда UX превосходит техническую педантичность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...