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>

Vor-/Zurücklinks für monatliche Archive

Expression Engines Dokumentation ist recht ausführlich und auch die Anzahl an vorgefertigten Templates ist reichlich, um sich einiges abzuschauen. Eines jedoch habe ich erst kürzlich ausgeknobelt. Die monatlichen Archive besaßen bislang keine Vor- und Zurücklinks, um zwischen den Monaten zu blättern. Keithz (der derzeit kein Blog besitzt) brachte mich auf die Idee, das Calendar-Modul dafür zu mißbrauchen. Heraus kam sowas:

{exp:weblog:calendar weblog="%blogname%"}
<ul id="prevnext">
  <li><a href="{previous_path=%main_template_group%/monthly}">« {previous_date format="%F %Y"}</a></li>
  <li><a href="{path=SITE_INDEX}" title="{blog_title}">Hauptseite</a></li>
  <li><a href="{next_path=%main_template_group%/monthly}">{next_date format="%F %Y"} »</a></li>
</ul>
{/exp:weblog:calendar}

Die Strings innerhalb der Prozentzeichen rühren vom Snippets-Plugin, mit dem ich Templates in andere Templates einbinde und darüber die Variablen an die Unter-Templates übergebe.