Categories
Internet Programmierung

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.

Categories
Internet Programmierung

Verschwurbelter Code

Sortierleiste

In meinem Rails-Programm möchte ich gerne Listenelemente (acts_as_list) horizontal sortieren können. Das ganze sollte über eine kleine Symbolleiste (s. Bild) über jedem Listenelement geschehen. Anfangs schrieb ich einfach den HTML/Rails-Code, der die 5 Buttons enthielt, direkt in den View hinein. Doch dann packte mich der Ehrgeiz und habe versucht, es zu verbessern. Am Ende hatte ich folgenden verschwurbelten Helpercode:

  def list_sort_buttons(options = {})
    "<table class=\"sort_buttons\"><tr>#{sort_buttons(options)}</tr></table>"
  end

  protected
  def sort_buttons(options = {})
    buttons = [ { :action => :to_top, :exclude_on => :first? },
                { :action => :up, :exclude_on => :first? },
                { :action => :delete, :exclude_on => :nil? },   # dummy
                { :action => :down, :exclude_on => :last? },
                { :action => :to_bottom, :exclude_on => :last? } ]
    cols = buttons.collect do |button|
      ["<td>", (sort_button(:controller => options[:controller],
                           :action => button[:action],
                           :id => options[:id]) unless options[:id].send(
                                                        button[:exclude_on])),
      "</td>"].join
    end.join
  end

  def sort_button(options = { :size => '16x16'})
    link_to image_tag(options[:action].to_s, :size => options[:size]),
            :controller => options[:controller], :action => options[:action],
            :id => options[:id]
  end

Endlich habe ich das Gefühl, die Anfängerpfade verlassen zu haben. Und das nur um DRY-willen.

An solchem Code sehe ich auch, daß es höchste Zeit fürs Wochenende wird