Rails flash-helper


Flashes sind in Rails ein schöner Weg, um den Benutzer über Ereignisse zu benachrichtigen. Zufällig bin ich dabei im Web über diesen Helper gestolpert. Nette Sache, funktioniert allerdings nicht ganz wie erwartet, wenn man noch zusätzlich das Human Attribute Override Plugin benutzt. Die Attributnamen wurden dabei vom Flash-Helper nicht korrekt angezeigt. Glücklicherweise lies sich dieses Problem leicht lösen. Der geänderte Helper sieht nun also so aus:

def display_standard_flashes(message = 'Folgende Probleme verhinderten das Speichern:')
  if flash[:notice]
    flash_to_display, level = flash[:notice], 'notice'
  elsif flash[:warning]
    flash_to_display, level = flash[:warning], 'warning'
  elsif flash[:error]
    level = 'error'
    if flash[:error].instance_of? ActiveRecord::Errors
      flash_to_display = message
      flash_to_display << activerecord_error_list(flash[:error])
    else
      flash_to_display = flash[:error]
    end
  else
    return
  end
  content_tag 'div', flash_to_display, :class => "flash #{level}"
end

def activerecord_error_list(errors)
  error_list = '<ul class="error_list">'
  errors.each_full do |m|
    error_list << "<li>#{m}</li>"
  end
  error_list<< '</ul>'
end

Nun werden auch die mit attr_human_name definierten Attributnamen in den Meldungen dargestellt.


One response to “Rails flash-helper”

  1. Um die Error Messages durchzu itereiren ist dies besser:
    errors.each do |attr,m|

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.