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>
,

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.