2013-09-02 4 views
0

Я использую Угловая послать запрос JSON к контроллеру, на мой контроллер прошить уведомление, как это:Рельсы ясный флэш уведомление после ответа JSON

flash[:notice] = "Toon has been tagged" 

После того как я хочу использовать шаблон RABL вернуть ответ JSON а также включить мое сообщение для уведомления о вспышках следующим образом:

object @toon 
attributes :id, :uuid, :get_tag_string 
if flash 
    node(:flash) do |f| 
    flash.each do |k, v| 
     { :msg => v, :name => k } 
    end 
    end 
end 
attributes :errors 

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

 <% flash.each do |key, value| %> 
     <div class="row-fluid"> 
      <div class="span8 offset1"><%= content_tag(:div, value, class: "alert alert-#{key} center")%></div> 
     </div> 
     <% end %> 

Я мог бы удалить это или сделать after_filter в мой контроллер для вызова flash.clear IS Есть ли способ сделать это?

СПАСИБО !!

ответ

1

Решите с flash.now в моем контроллере :)

Спасибо за ваш ответ Артур Френкеля, понравился ваш способ передать сообщения

1

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

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

<div ng-show="showMessages" class="alert"> 
    {{myMessages}} // obviously here you may have an ng-repeat or similar 
</div> 

В моем основном угловом контроллере я устанавливаю $ scope.showMessages (true или false). На данный момент это та же проблема. В моем контроллере я использую следующий обратный вызов, чтобы увидеть, когда маршрут изменился. Когда он изменен, я могу установить для параметра $ scope.showMessages значение false.

$scope.$on('$routeChangeStart', function (scope, next, current) { 
    $scope.showMessages = false; 
} 

Я также использовать это событие routeChangeStart, чтобы иметь дело с раз, когда я хочу сообщение, чтобы выйти на следующий PAGE-, добавив еще один вар контролировать «показать это только на следующей странице».

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