Sí, es posible crear un parcial app/views/shared/_flash_messages.js.rjs
, que luego se puede hacer desde cualquier lugar (por ejemplo, de otros rjs
parciales.)
Mi enfoque en este tipo de aplicaciones ha sido el siguiente:
para las respuestas de los no-AJAX que puede tener un flash:
- en el diseño (p.
layouts/application.erb
), agregue por ejemplo:
render :partial => 'shared/flash_messages.html.erb'
para las respuestas AJAX que también pueden necesitar para mostrar un mensaje flash, he añadido el rjs
siguiente código:
- en cada respuesta
rjs
(por ejemplo controller/action.js.rjs
), añadir por ejemplo:
render :partial => 'shared/flash_messages.js.rjs'
Cuando los dos parciales hacen lo necesario para procesar el flash, llame al flash.discard(:error)
o flash.discard(:notice)
según corresponda.
Muestra app/views/shared/flash_messages.html.erb
archivo:
<% 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 %>
Muestra app/views/shared/flash_messages.html.rjs
archivo:
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
Gracias. Este era exactamente el tipo de ejemplo que esperaba. Mis archivos js.erb están mucho más limpios ahora;) – atmorell