bonum_cete
bonum_cete

Reputation: 4962

add id or class to flash message

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

Answers (3)

Frederick Cheung
Frederick Cheung

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

Damien
Damien

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

chemick
chemick

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

Related Questions