-
-
Save roberto/3344628 to your computer and use it in GitHub Desktop.
<% flash.each do |type, message| %> | |
<div class="alert <%= bootstrap_class_for(type) %> fade in"> | |
<button class="close" data-dismiss="alert">×</button> | |
<%= message %> | |
</div> | |
<% end %> |
<%= render partial: "shared/flash_messages", flash: flash %> |
module ApplicationHelper | |
def bootstrap_class_for flash_type | |
case flash_type | |
when :success | |
"alert-success" | |
when :error | |
"alert-error" | |
when :alert | |
"alert-block" | |
when :notice | |
"alert-info" | |
else | |
flash_type.to_s | |
end | |
end | |
end |
FYI - to get this to work, i also needed to add: add_flash_types :success, :info, :warning, :danger
to the applications controller.
As of 4.1 this code needs to be updated due to the :symbol to String change in flash messages.
def bootstrap_class_for(flash_type)
case flash_type
when "success"
"alert-success" # Green
when "error"
"alert-danger" # Red
when "alert"
"alert-warning" # Yellow
when "notice"
"alert-info" # Blue
else
flash_type.to_s
end
end
👍 @clarkbw, Thanks!! My flash helper method finally got working, because it did not work by :symbol to String issue.
def alert_class_for(flash_type)
{
:success => 'alert-success',
:error => 'alert-danger',
:alert => 'alert-warning',
:notice => 'alert-info'
}[flash_type.to_sym] || flash_type.to_s
end
Thanks for the great tip @annieogrady, that worked!
For Bootstrap 3:
<% flash.each do |type, message| %>
<div class="alert <%= alert_class_for(type) %> alert-dismissible fade in">
<button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
<%= message %>
</div>
<% end %>
Thanks! This worked great for my Rails 4 app.
@icem +1, @JoshTGreenwood +1, @rafaelfragosom +1
The code with the correct message shows up in the source but does not display on the screen.
Rails 4.1 my partial is always rendering with classes 'alert alert'. My testimonials_controller:
def update
respond_to do |format|
if @testimonial.update(testimonial_params)
format.html { redirect_to @Testimonial, success: 'Testimonial was successfully updated.' }
format.json { render :show, status: :ok, location: @Testimonial }
else
format.html { render :edit }
format.json { render json: @testimonial.errors, status: :unprocessable_entity }
end
end
end
Everything works fine with :alert, but not with any of the other names. The symbol doesn't seem to be getting recognised by the helper method.
fantastic, thank you!
def bootstrap_class_for flash_type
case flash_type
when "success"
"alert-success"
when "error"
"alert-danger"
when "alert"
"alert-warning"
when "notice"
"alert-info"
else
flash_type.to_s
end
end
This works better in Bootstrap 3 IMHO.
for those that just need 2 colours for simplicity flash[:notice]
and flash[:error]
:
app/views/layouts/_flash_messages.html.haml
Haml template
- flash.each do |name, msg|
%div{:class => "alert alert-#{name.to_s == 'notice' ? "success" : "warning"}"}
%a.close{"data-dismiss" => "alert"} ×
%div{:id => "flash_#{name}"}= msg
module FlashHelper
def flash_messages
render partial: "layouts/flash_messages", flash: flash
end
end
Easy!
<% flash.each do |name, message| %> <p class="alert alert-<%= name %> fade-in"><%= message %></p> <% end %>
RE: success message not working.... what is strange is the other 3 do work.