Easily add Toastr flash notices to Rails apps
I learned about Toastr JavaScript library last week and have been delighted to use it instead of more traditional flash messaging.
First of all get the Toastr sources. I opted to link to them on CDNJS:
= stylesheet_link_tag 'https://cdnjs.cloudflare.com/ajax/libs/toastr.js/2.1.3/toastr.min.css'
= javascript_include_tag 'https://cdnjs.cloudflare.com/ajax/libs/toastr.js/2.1.3/toastr.min.js'
Next I defined some extra flash types in my application_controller.rb
file to match Toastr's native notification types and enable use of the built-in styling.
class ApplicationController < ActionController::Base
add_flash_types :success, :info, :warning, :error
...
Finally, add the following block of JavaScript to the bottom of a layout template (or whatever shared partial that contains your JS and CSS includes.
- flash.keys.each do |key|
- toastr_key = key
- toastr_key = 'info' if key == 'notice'
- toastr_key = 'warning' if key == 'alert'
:javascript
$(function() {
toastr["#{toastr_key}"]("#{flash[key]}");
});
Lines 2 and 3 establish a mapping from conventional Rails notice
and alert
so that I don't have to hack libraries like Devise which rely on them.
Easy.