如何从列表中显示一次项目,其中该项目在ruby中多次显示

时间:2013-10-28 05:26:52

标签: ruby-on-rails ruby html5

我已经在我的.html.erb文件中编写了代码,但我认为在我的控制器中编写它可能更有意义吗?此代码返回所有名称。我试图弄清楚如何只获取一次标记名称,如果用户输入已经使用过的标记名称,它就不会再显示。

<ul>
  <% @pictures.each do |pic| %>
    <% pic.tags.each do |tag| %>
      <li>
        <%= tag.name %>
      </li>
    <% end %>
  <% end %>
</ul>

5 个答案:

答案 0 :(得分:1)

使用Enumerable#flat_mapArray#uniq

<ul>
  <% @pictures.flat_map { |pic| pic.tags.map(&:name) }.uniq.each do |name| %>
  <li>
    <%= name %>
  </li>
  <% end %>
</ul>

Example

答案 1 :(得分:1)

<ul>
  <% @pictures.collect{|x| x.tags.uniq}.flatten.uniq.each do |tag| %>
      <li>
        <%= tag.name %>
      </li>
  <% end %>
</ul>

答案 2 :(得分:1)

<ul>
      <% @pictures.each do |pic| %>
    <% pic.tags.uniq_by(&:name).each do |tag| %>
      <li>
        <%= tag.name %>
      </li>
    <% end %>
  <% end %>

答案 3 :(得分:0)

对用户输入的所有项目使用Array#-方法。

答案 4 :(得分:0)

这与存储标记值的方式有关,在save方法中,您应该将tags数组设为uniq。