rails 4 -- flash notice
Solution 1
In application.html.erb
, you would be displaying the flash
messages.
Update that code as below
<% flash.each do |name, msg| %>
<%= content_tag :div, msg, class: "alert alert-info" %>
<% end %>
You can add the classes that you want to apply to the flash message in the class
option.
EDIT
The class is setup as alert alert-notice
because of alert alert-<%= key %>
in your code.
When you call redirect_to @widget, notice: 'Widget was successfully created.
A flash message would be added in flash
hash with key as notice
and value as Widget was successfully created.
, i.e.,
flash[:notice] = "Widget was successfully created."
EDIT #2
format.html { redirect_to @widget, notice: 'Widget was successfully created.' }
notice: 'Widget was successfully created.'
is an argument passed to redirect_to
method. It is added to flash
hash in this method.
Solution 2
Add this to
app/controllers/application_controller.rb
class ApplicationController
add_flash_types :success, :warning, :danger, :info
end
and then you can do this in your controllers
format.html { redirect_to @widget, success: 'Widget was successfully created.' }
provided you did this in your layouts
<div class="container">
<% flash.each do |key, value| %>
<div class="alert alert-<%= key %>"><%= value %></div>
<% end %>
<%= yield %>
</div>
Solution 3
If you don't want to mess up with your ApplicationController
as @Sachin Mour indicated, you can just add few addtional CSS clases, accordingly:
in app/assets/stylesheets/custom.scss
:
/*flash*/
.alert-error {
background-color: #f2dede;
border-color: #eed3d7;
color: #b94a48;
text-align: left;
}
.alert-alert {
background-color: #f2dede;
border-color: #eed3d7;
color: #b94a48;
text-align: left;
}
.alert-success {
background-color: #dff0d8;
border-color: #d6e9c6;
color: #468847;
text-align: left;
}
.alert-notice {
background-color: #dff0d8;
border-color: #d6e9c6;
color: #468847;
text-align: left;
}
Step by step tutorial, how to approach flash messages with devise and bootstrap, you can find here
Related videos on Youtube
user101289
Updated on January 24, 2020Comments
-
user101289 over 4 years
I'm still working on my rails 4 demo site, and I'm seeing an odd thing. In the controller it has a line like this:
format.html { redirect_to @widget, notice: 'Widget was successfully created.' }
This renders a flash message in the redirected page, which is expected. However, the css class attached to the message div is
alert alert-notice
rather than a valid Bootstrap alert class, likealert-info
.Where is the class being set for this flash, and how do I customize it?
Also, if I'm deleting a record via ajax, is there a way to access the core flash container to display the message via js, or do I have to show / hide my own flash message div just for ajax requests?
EDIT: my Michael Hartl inspired
layouts/application.html.erb
:<div class="container"> <% flash.each do |key, value| %> <div class="alert alert-<%= key %>"><%= value %></div> <% end %> <%= yield %> </div>
Thanks!
EDIT 2:
Perhaps I wasn't clear enough in my original question. I understand exactly how the class is being set in the flash object in this case. I am interested in learning how to use and customize the
notice:
in theformat.html
block. It seems there should be a way to pass a class via this notice? Or is this not a core Rails way of doing things?-
Alex Wayne about 10 yearsThat depends on your views. Look at your
views/layouts/application.html.*
file and see where it's rendering theflash
content. -
Ruby Racer about 10 yearsBut alert alert-notice IS valid bootstrap class. You can always flash [:yourchoiceofalert] before the redirect action
-
Ruby Racer about 10 yearsYou might need to remove scaffold.css from your assets, as it scrambles some bootstrap classes
-
user101289 about 10 years@StavrosSouvatzis-- getbootstrap.com/components/#alerts -- I don't see alert-notice as a valid class. Am I missing something? Also, there's no scaffold.css in my assets. Thanks!
-
Ruby Racer about 10 yearsYeah, sorry, notice is not a case, what I meant to point out is that you need to have the word alert like "alert alert-'class'". Sorry for misleading, should I have done so.
-
-
user101289 about 10 yearsthanks, I realize that that's why the class is being applied. I guess I'm asking how that
notice:
works in theformat
block, and how it's accessed and turned into aflash
rather than passing aflash
object. -
user101289 about 10 yearsSorry, I just meant the
format.html
block-- how does thatnotice:
element get interpreted, and where? How do you set a custom class for the flash? -
Kirti Thorat about 10 years@user101289 See the EDIT #2 section for the
notice: element get interpreted,
question. -
Kirti Thorat about 10 yearsIf you have more questions, you should post them as a new question. Leave the comments for discussion on current question, i.e.,
Where is the class being set for this flash, and how do I customize it?
-
saudes about 4 yearsHere are the docs for
add_flash_types
: api.rubyonrails.org/classes/ActionController/Flash/…