在Ruby/Rails中检查.each循环的第一个迭代的最DRY方法是什么?

23

在我的.erb文件中,我有一个简单的each循环:

<%= @user.settings.each do |s| %>
  ..
<% end %>

如何检查当前是否正在进行第一次迭代?我知道我可以设置i = 0 ... i ++,但这只会使.erb代码变得混乱。有什么建议吗?


2
最终目标是什么?只针对第一个元素做一些操作,然后迭代其余部分是否更容易?这样可以避免条件逻辑。 - Dave Newton
@DaveNewton,那听起来是一个有趣的方法,你应该发一个例子 :) - Peter Brown
2个回答

36

这取决于你的数组大小。如果它非常大(几百个或更多),那么你应该.shift出数组的第一个元素,对其进行处理,然后显示整个集合:

<% user_settings = @user_settings %>
<% first_setting = user_settings.shift %>
# do you stuff with the first element 
<%= user_settings.each do |s| %>
  # ...

或者您可以使用.each_with_index方法:

<%= @user.settings.each_with_index do |s, i| %>
  <% if i == 0 %>
    # first element
  <% end %>
  # ...
<% end %>

1
是的!当你很少使用这些东西时,你会惊讶于你可以多快地忘记它们。谢谢! - Wes Foster
StackOverflow 让我等了 10 分钟才能接受答案,但没关系。这段代码只是为了将循环中的第一项与其余项稍微以不同方式显示。我想我本可以把它们分开,但使用循环似乎更容易并且能使代码组更加紧凑。你说得非常对。 - Wes Foster

7
我发现最易读的方式如下:

<%= @user.settings.each do |s| %>
  <% if @user.settings.first == s %>
    <% # Your desired stuff %>
  <% end %>
<% end %>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接