2016-04-22 12 views
0

Ich habe folgende Teil:Rails 4: Übertragen Sie teilweise mit variabler

<tr class="profile-row"> 
    <td class="profile-header"><%= attribute %></td> 
    <% for week in @weeks %> 
    <td><%= week.<%= field %> %></td> <!-- where it fails --> 
    <% end %> 
</tr> 

... und ich möchte in der Lage sein, zwei Variablen zu liefern, attribute und field. Wenn ich versuche, die teilweise mit dem folgenden zu machen:

<%= render 'foo', attribute: 'Current Weight', field: 'current_weight' %> 

... Ich möchte:

<tr class="profile-row"> 
    <td class="profile-header">Current Weight</td> 
    <% for week in @weeks %> 
    <td><%= week.current_weight %></td> <!-- where it fails --> 
    <% end %> 
</tr> 

... aber irgendwie syntax error, unexpected tOP_ASGN.... Ich verstehe, dass dies nicht der richtige Weg ist, eine Variable zu liefern, aber wie soll ich das machen?

Antwort

3

können nicht verschachtelt ERB-Tags wie folgt aus:

<%= week.<%= field %> %> 

Statt dies tun:

<%= week %>.<%= field %> 

Was auch immer Sie in ERB-Tags setzen Ruby ist. Dein Code lautet also: "Führe den Ruby-Code week.<%= field aus und halte das Ergebnis hier." Aber das ist keine gültige Ruby-Syntax.

Oder wenn field den Namen des Attributs enthält, können Sie dies tun:

<%= week.send field.to_sym %> 
0

können nicht verschachtelt erb-Tags. Wenn Ihre Variablen Zeichenfolgen sind, können Sie sie verketten.

<%= week + "." + field%> 

Wenn das ein Fehler wirft versuchen, diese

<%= week.to_s + "." + field.to_s%>