Reputation: 4962
Is there a way to add a class or an id to a specific flash message? I need to have some messages fade away and some persist. I would like to do this based on a html class.
Thanks for any help
Upvotes: 4
Views: 4157
Reputation: 84114
There is nothing magical about what can put in the flash. It's just a hash that is stuffed in the session and cleared out for you.
You could (for example) do
flash[:notice] = {:class => :urgent, :body => 'hello'}
And then in your layout
- if flash[:notice]
%div{:class => flash[:notice][:class]}
= flash[:notice][:body]
But there's definitely more than one way to do this - you could just use one class when it's flash[:notice]
, another for flash[:error]
etc
Upvotes: 4
Reputation: 27473
Add a class:
<%= content_tag(:p, notice, class: 'notice') if notice %>
<%= content_tag(:p, alert, class: 'alert' ) if alert %>
Add an id:
<%= content_tag(:p, notice, id: 'notice') if notice %>
<%= content_tag(:p, alert, id: 'alert' ) if alert %>
It renders (example):
<p class="alert">Invalid email or password.</p>
<p id="alert">Invalid email or password.</p>
Upvotes: 0
Reputation: 146
Flash messages are simply stored in a hash, flash
. In your view, you might iterate over all of your flash messages like this:
<% flash.each do |key, msg| %>
<%= content_tag :div, msg, :id => key %>
<% end %>
You could always check for a specific message and append a specific class. Maybe something like:
<% flash.each do |key, msg| %>
<% if msg.include? 'fatal' %>
<%= content_tag :div, msg, :id => key, :class => 'fatal' %>
<% end %>
<% end %>
Here's a railscast with more information on flash messages.
http://railscasts.com/episodes/18-looping-through-flash
Upvotes: 3