Fröhliches Wintersonnenwendfest!

Als Atheist halte ich nichts von der ganzen christlichen Symbolik, die mit Weihnachten verbunden wird. Ich bin selbst auch der Meinung, daß Weihnachten nicht zufällig auf ein Datum gelegt wurde, das sehr kurz nach der Wintersonnenwende liegt. Hier wurde wohl versucht, ein heidnisches Fest für sich selbst zu vereinnahmen. Um aber nicht als Miesepeter und Spielverderber darzustehen, billige ich das Fest als eine Feier der Wintersonnenwende.

Die kritische Frage, ob man denn nun einen natürlich wiederkehrenden Vorgang überhaupt feiern muß, lasse ich mal außen vor. Mit der gleichen Frage ließen sich schließlich auch Geburtstagsfeiern in Frage stellen. Und wir Menschen lieben es einfach, Gründe zu erfinden, um miteinander zu feiern. Vielleicht sollten wir dann aber auch die Sommersonnenwende und die beiden Equinoktien feiern? Ich bin dabei.

In diesem Sinne, ein fröhliches Wintersonnenwendfest!

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

Partials und lokale Variablen

Meine erste Begegnung mit Partials in Ruby on Rails sah etwa so aus:

  render :partial => 'item', :collection => @items

Und in Partial selbst sah das meistens dann so aus:

<tr>
  <td><%= h(item.name) %></td>
  <td><%= item.price %></td>
</tr>

Ich ließ mich durch dieses Beispiel zu der Annahme verleiten, daß wenn die Collection oben aus @items besteht, die lokale Variable im Partial dann der Singular davon (in diesem Fall also item) sein müßte. Umso erstaunter war ich, daß folgendes nicht funktionierte.

  render :partial => "milestone/show", :collection => @project.milestones

Meiner Logik nach wäre nun im Partial die lokale Variable milestone. Da war Rails jedoch ganz anderer Meinung. Erst nach einem genaueren Studium von ActionView::Partials klärte sich die Fehleinschätzung auf. Der Name der lokalen Variable leitet sich aus dem Namen des Partials ab. Somit wäre der Name der Variable im zweiten Beispiel show. Das Partial für das zweite Beispiel sieht nun in etwa so aus:

<h3><%= h(show.name) %></h3>

Notiz an mich

Damit OpenStep im Parallels Desktop auf dem Mac auch mit VESA-Treiber bootet, sollte man VT-X deaktivieren. Damit erspart man sich viel Frust.