2016-06-29 5 views
1

Ich habe eine Sammlung von Elementen, die ich in einem Teil rendern, aber ich möchte nur ein bestimmtes Element mit dem allerersten Element anzeigen. Meine spezifische Instanz zeigt E-Mail-Adressen an, aber ich möchte nur, dass das E-Mail-Symbol neben der ersten Instanz angezeigt wird (ähnlich wie die Android Contacts-App).Schienen teilweise für die Sammlung, nur bestimmte Dinge für das erste Element anzeigen

Ich habe eine sehr "hacky" -Lösung, die Instanzvariablen in der Ansicht verwendet, was keine gute Praxis ist. Aber ich habe Mühe, einen saubereren Weg zu finden, um das zu implementieren, was ich will.

Der Controller:

@email_addresses = EmailAddress.order(:primary) # primary is a boolean value 

Der Teil:

# views/email_addresses/_email_address.html.erb 
<div class="email-address"> 
    <% unless @email_icon_displayed 
    <% @email_icon_displayed = true %> 
    <div class="email-address-icon"> 
     <span class="icon email"></span> 
    </div> 
    <% end %> 
    <div class="email-address-value"> 
    <%= email_address.value %> 
    </div> 
</div> 

Teil Aufruf im Blick:

<%= render partial: "email_addresses/email_address", collection: @email_addresses %> 

Das funktioniert richtig und zeigt nur das E-Mail-Symbol für das erste Element, aber Instanzvariablen in der Ansicht scheint wie eine schlechte Idee.

Antwort

0

Dies mag ein wenig zu spät sein, aber ich hatte das gleiche Ziel und ich habe es erreicht, indem ich eine "versteckte" Zählervariable in Rails partiellen Sammlungen verwendete.

ich meine Teilsammlung wie folgt aufgerufen:

<%= render partial: "questions/possible_answer", 
      collection: question.possible_answers, as: 'value' %> 

Und in meinem Teil ich die Variable value_counter zugreifen kann, die für jeden Teil erhöht. So etwas mit dem ersten Element laufen nur, ich habe es wie folgt aus:

if value_counter == 0 
    #do something 
end 

Ich denke, Ihr Fall, dass Sie würde es so zugreifen müssen: email_address_counter

Gefunden diese Lösung hier: https://coderwall.com/p/t0no0g/render-partial-with-collection-has-hidden-index

+0

Das sollte auch funktionieren. Ich ging tatsächlich mit einer CSS-Lösung, die alle Elemente auf der Seite ausgab, aber als "display: none;" formatiert wurde und dann "element: first {display: block; } '(oder so), um nur die erste anzuzeigen. –

Verwandte Themen