私は部分的にレンダリングしている要素のコレクションを持っていますが、最初の要素で特定の要素を表示したいだけです。私の特定のインスタンスでは電子メールアドレスが表示されていますが、電子メールアイコンは最初のインスタンスの横に1回だけ表示されます(Androidの連絡先アプリケーションと同じように)。コレクションの部分的な部分は、最初の要素の特定のものだけを表示します。
私はビューでインスタンス変数を使用する非常に「ハックな」ソリューションを持っていますが、これは良い方法ではありません。しかし、私は自分が望むものを実行するためのよりクリーンな方法を見つけるのに苦労しています。
コントローラ:
@email_addresses = EmailAddress.order(:primary) # primary is a boolean value
部分:
# 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>
ビューで部分的に電話:
<%= render partial: "email_addresses/email_address", collection: @email_addresses %>
これは正常に動作し、最初の要素だけのための電子メールのアイコンが表示され、ビュー内のインスタンス変数は悪い考えのようです。
それもうまくいくはずです。私は実際にCSSソリューションを使って、すべての要素をページに印刷しましたが、 'display:none;'と書式を設定し、 'element:first {display:block; } '(またはそのようなもの)は、最初のものだけを表示します。 –