Rails部分用于收集,仅显示第一个元素

时间:2016-06-29 15:07:35

标签: ruby-on-rails model-view-controller

我有一些我正在渲染的元素集合,但我只想用第一个元素显示某个元素。我的具体实例是显示电子邮件地址,但我只希望电子邮件图标显示在第一个实例旁边(类似于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 %>

这样可以正常工作,只显示第一个元素的电子邮件图标,但视图中的实例变量看起来不错。

1 个答案:

答案 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