29

In several of my controllers, I have redirects/flash messages

redirect_to products_url, :notice => "message here", 
redirect_to states_url, :error => "oops!" etc... 

In my sessions controller, however, upon successful authentication, I have flash[:success] = "welcome!" redirect_to user

I'd like to be able in my other controllers to do something like :success => "yay!"

This is mostly for cosmetic/consistency purposes, but are :notice, :alert and :error the only flash-types available / can I add additional types? Am I making sense?

Thanks!

mu is too short
  • 426,620
  • 70
  • 833
  • 800
Chip
  • 1,653
  • 2
  • 20
  • 27

3 Answers3

55

I believe without changes, this is as close as you'll get:

redirect_to user_path(@user), :flash => { :success => "Message" }

Here's some additional notes regarding the friendly flash syntax addition.

Community
  • 1
  • 1
tlbrack
  • 926
  • 7
  • 12
13

I just found out that in Rails 4 you can register custom types in app controller:

class ApplicationController
    ...
  add_flash_types :error, :another_custom_type
end

# app/controllers/users_controller.rb
class UsersController < ApplicationController
  def create
    ...
    redirect_to home_path,
      error: "An error message for the user"
  end
end

# app/views/home/index
<%= error %>

The merit goes to http://blog.remarkablelabs.com/2012/12/register-your-own-flash-types-rails-4-countdown-to-2013

luigi7up
  • 5,779
  • 2
  • 48
  • 58
0

If you want to access different types of flash messages styles based on bootstrap alert (success and warning), in you controller:

flash[:success] = "This works!"

And in your layout (most probably application.html.erb)

  <% if success.present? %>
      <p class="alert alert-success"><%= success %></p>
  <% end %>

Same thing with warning and other bootstrap alert styles.

Guillaume Bihet
  • 625
  • 1
  • 9
  • 17