2016-06-29 14 views
1

私は部分的にレンダリングしている要素のコレクションを持っていますが、最初の要素で特定の要素を表示したいだけです。私の特定のインスタンスでは電子メールアドレスが表示されていますが、電子メールアイコンは最初のインスタンスの横に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 %> 

これは正常に動作し、最初の要素だけのための電子メールのアイコンが表示され、ビュー内のインスタンス変数は悪い考えのようです。

答えて

0

これは少し遅れているかもしれませんが、私は同じ目標を持っており、Railsの部分コレクションで "隠し"カウンター変数を使用してこれを達成しました。

私はこのような私の部分のコレクションと呼ばれる:

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

をそして、私の部分の内側に、私は、各部分のために増分変数value_counterに、アクセスすることができます。だから私はこのようにそれをやった、最初の要素だけで何かを実行するために:

if value_counter == 0 
    #do something 
end 

私はあなたのケースは、あなたがこのようにアクセスする必要があると思います:実測email_address_counter

ここでこのソリューション:https://coderwall.com/p/t0no0g/render-partial-with-collection-has-hidden-index

+0

それもうまくいくはずです。私は実際にCSSソリューションを使って、すべての要素をページに印刷しましたが、 'display:none;'と書式を設定し、 'element:first {display:block; } '(またはそのようなもの)は、最初のものだけを表示します。 –

関連する問題