2013-11-16 3 views
6

Вот мое действие для создания. Он создает новый экземпляр Message, который проверяется с помощью проверки модели.Вспышка не очищается после просмотра

Тогда есть простой цикл if, который отправляет сообщение, если проверка модели была выполнена и отображает «новое» представление, если они хотят отправить другое. Если проверка модели не была выполнена, она просто снова отображает «новое» представление.

Флэш-хэш также заполнен соответствующей информацией, успешным сообщением и предупреждающим сообщением, если сообщение было успешным или нет.

def create 
    @message = Message.new(message_params) 

    if @message.valid? 

     Contactform.contact(@message.name, @message.town, @message.email, @message.content).deliver 
     flash[:success] = "Sent message" 
     render 'new' 

    else 

     flash[:alert] = "Alert" 
     render 'new' 

    end 
    end 

Однако, я не думаю, что я делаю это правильно, потому что сообщения остаются во вспышке. Они не очищаются после того, как они были просмотрены один раз.

Как я могу убедиться, что вспышка очищена, как и должно быть?

Update

Это как ошибка приходит о. Я отправляю сообщение успешно, и я перенаправляюсь к «новому» виду, и получаю «успешную» вспышку. Я пытаюсь отправить ошибочное сообщение, и я перенаправляюсь к «новому» представлению, и я получаю как «успешную» вспышку, так и «предупреждение». Очень запутанный для пользователя!

Второе, что я просматриваю на другой странице, оба вспышки исчезают, но это проблема, я думаю. Что-то связано с возвращением на ту же страницу, что и Rails не знает, чтобы очистить флеш. Могу ли я отключить вспышку?

ответ

7

Я думаю, прочитав раздел о flash.now в рельсах, doc поможет вам это очистить: http://guides.rubyonrails.org/action_controller_overview.html#flash-now.

Вспышка для следующего запроса. В этом случае вы не отправляете новый запрос после своего действия create - вы просто повторно просматриваете представление new. Я думаю, что flash.now - это то, что вы хотите использовать здесь.

Я бы также сказал, что в вашем случае создания успеха действие create должно выполнять перенаправление, а не просто перерисовывать представление. Are redirect_to and render exchangeable? объясняет разницу между перенаправлением и рендерингом

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