如何通过数组获取唯一元素并将它们分组到rails上的ruby中

时间:2012-12-13 12:03:07

标签: ruby-on-rails arrays iteration grouping

我有问题。下面的代码是ruby in rails

的视图代码
<table >
<tr>
    <th>Url</th>
    <th>Tags</th>
</tr>   
 <% @array_bookmark = @bookmark.class == Array ? @bookmark : [@bookmark] %> 
 <% Array(@bookmark).each do |book| %>
 <tr>
 <td><%= book.url %></td>
 <td><%= book.tags %></td>
 </tr>
 <% end %>
 </table>

这会产生类似的结果:

  Url                   Tags
 www.mrabhiram.tumblr.com   abhi
 www.mrabhiram.tumblr.com   blog
 google.com                 google
 google.com                 blog

但是,我想把它作为

  Url                   Tags
 www.mrabhiram.tumblr.com   abhi,blog
 google.com                 google,blog

有人能为我提供解决方案吗?它应该足够通用以迭代数组。

提前谢谢。

3 个答案:

答案 0 :(得分:1)

<% Array(@bookmark).group_by {|b| b.url}.each do |url, books| %>
  <tr>
    <td><%= url %></td>
    <td><%= books.map {|b| b.tags}.flatten.uniq.join(" ") %></td>
  </tr>
<% end %>

答案 1 :(得分:1)

使用group_by语句

UPD

 <% Array(@bookmark).group_by(&:url).each do |url, books| %>
 <tr>
 <td><%= url %></td>
 <td><%= books.map(&:tags).flatten.join(',') %></td>
 </tr>

答案 2 :(得分:0)

<% Array(@bookmark).uniq.each do |book| %>
 <tr>
 <td><%= book.url %></td>
   <td><%= book.tags %></td>
 </tr>
<% end %>

以上将有效。