Do..end循环只返回主数组

时间:2017-04-01 14:51:49

标签: arrays ruby methods pry

有谁能帮我在这里找到问题?

    @deals.each.with_index(1) do |deal, i|
  binding.pry
  puts "#{deal.title} - #{deal.price} - Rating: #{deal.deal_rating}"
  # puts "Available for #{deal.price}"
  # puts "Rating: #{deal.deal_rating}"
  # puts "#{deal.title}"
  # puts "Available at "
end

如果我执行binding.pry,并尝试检查此处的交易价值,它会返回完整的@deals数组而不是一个交易。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

仅使用each_with_index,它将为您提供迭代元素总数内的对象和索引:

<% @deals.each_with_index do |deal, i| %>
  <% binding.pry %>
  <%= "#{deal.title} - #{deal.price} - Rating: #{deal.deal_rating}" %>
<% end %>

通过pry检查您从@deals获取第一个元素:

[1] pry(#<#<Class:0x007fe0cd161ee8>>)> @deals.first
=> #<Deal:0x007fe0cb2751d8
 id: 1,
 title: "Deal-0",
 price: 764,
 deal_rating: 93,
 created_at: Sat, 01 Apr 2017 15:00:29 UTC +00:00,
 updated_at: Sat, 01 Apr 2017 15:00:29 UTC +00:00>

如果您想在视图中执行此操作,请使用unless使用index检查第一个元素:

<% @deals.each_with_index do |deal, i| %>
  <% unless !i.zero? %>
    <%= "#{deal.title} - #{deal.price} - Rating: #{deal.deal_rating}" %>
  <% end %>
<% end %>

不同之处在于使用with_index可以使用可选参数来偏移起始索引,因此您要指定从with_index(1)开始的索引,而不是尝试获取第一个元素,看到这个:

<% @deals.each.with_index(2) do |deal, index| %>
  <%= "#{index}: #{deal}" %><br>
<% end %>

2: #<Deal:0x007fe0cb55ca90>
3: #<Deal:0x007fe0cb55c950>
4: #<Deal:0x007fe0cb55c810>
...

这从index 2开始,另一个从0开始。

<% @deals.each_with_index do |deal, index| %>
  <%= "#{index}: #{deal}" %><br>
<% end %>
0: #<Deal:0x007fe0cb55ca90>
1: #<Deal:0x007fe0cb55c950>
2: #<Deal:0x007fe0cb55c810>
3: #<Deal:0x007fe0cb55c6d0>
4: #<Deal:0x007fe0cb55c590>