Adicionar alertas de bootstrap ao aplicativo Rails

Eu vejo muitos exemplos de como fazer isso. A maioria gera um alerta para cada erro que retorna à página. Com essa solução, ele reúne todas as mensagens por tipo em um alerta por tipo.


module BetterBootstrapFlashHelper

ALERT_TYPES
= [:error, :info, :success, :warning]

def bootstrap_application_flash
flash_messages
= []
alert_result_types
= {:error => [], :info => [], :success => [], :warning => []}
flash
.each do |type, message|
# Skip empty messages, e.g. for devise messages set to nothing in a locale file.
next if message.blank?

type
= :success if type == :notice
type
= :error if type == :alert
next unless ALERT_TYPES.include?(type)
Array(message).each do |msg|
alert_result_types
[type] << content_tag(:li, msg.html_safe) if msg
end
end
alert_result_types
.each do |key, content|
flash_messages
<< generate_alert(key, content_tag(:ul, content.join.html_safe, :class => 'unstyled')) if content.length > 0
end
flash_messages
.join.html_safe
end

def generate_alert(type, messages)
content_tag
(:div,
content_tag
(:button, raw("&times;"), :class => "close", "data-dismiss" => "alert") +
messages
, :class => "alert fade in alert-#{type}")
end

end