Ruby on rails rails-使用Group_by时-如何获取索引?
我有以下资料:Ruby on rails rails-使用Group_by时-如何获取索引?,ruby-on-rails,ruby,ruby-on-rails-3,enumerable,Ruby On Rails,Ruby,Ruby On Rails 3,Enumerable,我有以下资料: sets = DataSet.all.group_by{ |data| [data.project_id, "-", data.thread_id].join(" ") } <% sets.each do |range, datas| %> <p><%= range %>:</p> <% datas.each do |data| %> <%=data%> <p>Last
sets = DataSet.all.group_by{ |data| [data.project_id, "-", data.thread_id].join(" ") }
<% sets.each do |range, datas| %>
<p><%= range %>:</p>
<% datas.each do |data| %>
<%=data%>
<p>Last Post<%= data.last.created_at %></p>
<% end %>
<% end %>
sets=DataSet.all.group_by{| data |[data.project_id,“-”,data.thread_id].join(“”}
:
最后一篇文章
问题是我需要一个索引。因此,我更新了上述内容:
<% sets.each_with_index do |range, datas, i| %>
<p><%= range %>:</p>
<% datas.each do |data| %>
<%= i %>
<%=data%>
<p>Last Post<%= data.last.created_at %></p>
<% end %>
<% end %>
:
最后一篇文章
然后,这将中断,错误为:0:Fixnum的未定义方法'last'
想法?谢谢您观察到的问题是由于为块分配参数的方式。在第二个示例中,您将看到
range
包含一个数组,该数组包含一个range
和匹配的datas
,datas
变量包含索引,i
始终为nil
这是因为如果ruby“unplats”是块的唯一参数,那么它将数组化。如果您有多个类型(在本例中为数组和整数),则必须提示ruby它应该做什么。最简单的方法是使用括号
<% sets.each_with_index do |(range, datas), i| %>
...
<% end %>
谢谢霍尔格,我第一次遇到这种情况。
my_array = [1, 2]
(x, y) = my_array
p x # prints 1
p y # prints 2