【问题标题】:DRYest way to check if in the first iteration of an .each loop in Ruby/RailsDRIest 方法来检查是否在 Ruby/Rails 中的 .each 循环的第一次迭代中
【发布时间】:2013-01-04 23:09:47
【问题描述】:

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

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

检查当前是否正在进行第一次迭代的最简单方法是什么?我知道我可以设置i=0...i++,但这在.erb 内部太乱了。有什么建议吗?

【问题讨论】:

  • 终极目标是什么?只对第一个元素做某事,然后遍历其余元素会更容易吗?它将条件逻​​辑排除在外。
  • @DaveNewton 听起来是个有趣的方法,你应该发布一个例子 :)

标签: ruby-on-rails ruby-on-rails-3 loops each


【解决方案1】:

这取决于数组的大小。 如果真的很大(几百甚至更多),你应该.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 %>

【讨论】:

  • 是的!令人惊讶的是,当您几乎不使用它们时,您可以如此迅速地忘记它们。谢谢!
  • StackOverflow 让我等了 10 分钟才接受答案,不用担心。这段代码用于简单地显示循环中的第一项,与其他项略有不同。我想我可以将它们分开,但看起来循环会更容易,并且可以使代码组更加包含。你一针见血
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-25
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    相关资源
    最近更新 更多