我有一些我正在渲染的元素集合,但我只想用第一个元素显示某个元素。我的具体实例是显示电子邮件地址,但我只希望电子邮件图标显示在第一个实例旁边(类似于Android Contacts应用程序的操作方式)。
我有一个非常“hacky”的解决方案,在视图中使用实例变量,这不是一个好习惯。但我正在努力寻找一种更清洁的方式来实现我想要的东西。
控制器:
@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 :(得分: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