Create a gist now

Instantly share code, notes, and snippets.

Embed
Rails flash messages with AJAX requests
#flash-message
- flash.each do |name, msg|
= content_tag :div, msg, :id => "flash_#{name}"
class ApplicationController < ActionController::Base
protect_from_forgery
after_filter :flash_to_headers
private
def flash_to_headers
return unless request.xhr?
response.headers['X-Message'] = flash_message
response.headers["X-Message-Type"] = flash_type.to_s
flash.discard # don't want the flash to appear when you reload page
end
def flash_message
[:error, :warning, :notice].each do |type|
return flash[type] unless flash[type].blank?
end
end
def flash_type
[:error, :warning, :notice].each do |type|
return type unless flash[type].blank?
end
end
end
var show_ajax_message;
show_ajax_message = function(msg, type) {
$("#flash-message").html("<div id='flash-" + type + "'>" + msg + "</div>");
return $("#flash-" + type).delay(5000).slideUp('slow');
};
$(document).ajaxComplete(function(event, request) {
var msg, type;
msg = request.getResponseHeader("X-Message");
type = request.getResponseHeader("X-Message-Type");
return show_ajax_message(msg, type);
});
show_ajax_message = (msg, type) ->
$("#flash-message").html "<div id='flash-#{type}'>#{msg}</div>"
$("#flash-#{type}").delay(5000).slideUp 'slow'
$(document).ajaxComplete (event, request) ->
msg = request.getResponseHeader("X-Message")
type = request.getResponseHeader("X-Message-Type")
show_ajax_message msg, type #use whatever popup, notification or whatever plugin you want
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment