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.
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. –