Да, вы можете создать app/views/shared/_flash_messages.js.rjs
партиал, который затем можно рендерить из любого места (например, из других rjs
партиалов).
Мой подход в таких приложениях был следующим:
для ответов без AJAX, которые могут иметь вспышку:
- в макете (например,
layouts/application.erb
), добавьте, например:
render :partial => 'shared/flash_messages.html.erb'
для ответов AJAX, которые могут также потребоваться для отображения флэш-сообщения, я добавил следующий код rjs
:
- в каждом
rjs
ответе (например, controller/action.js.rjs
), добавьте, например:
render :partial => 'shared/flash_messages.js.rjs'
Если две части делают необходимое для рендеринга флэш-памяти, затем вызовите flash.discard(:error)
или flash.discard(:notice)
в зависимости от ситуации.
Образец app/views/shared/flash_messages.html.erb
Файл:
<% if flash[:error] %>
<div id="flash_message" class="error"><%= h(flash[:error]) %></div>
<% flash.discard(:error) %>
<% elsif flash[:notice] %>
<div id="flash_message" class="notice"><%= h(flash[:notice]) %></div>
<% flash.discard(:notice) %>
<% else %>
<div id="flash_message" style="display: none;" />
<% end %>
Образец app/views/shared/flash_messages.html.rjs
Файл:
if !flash[:error].blank?
page['flash_message'].
replace_html(flash[:error]).
removeClassName('notice').
addClassName('error').
show()
else
page['flash_message'].
replace_html(flash[:notice]).
removeClassName('error').
addClassName('notice').
show()
end