1

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

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

5 回答 5

1
<ul>
  <% @pictures.collect{|x| x.tags.uniq}.flatten.uniq.each do |tag| %>
      <li>
        <%= tag.name %>
      </li>
  <% end %>
</ul>
于 2013-10-28T06:08:20.237 回答
1

使用Enumerable#flat_mapArray#uniq

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

例子

于 2013-10-28T05:36:56.450 回答
1
<ul>
      <% @pictures.each do |pic| %>
    <% pic.tags.uniq_by(&:name).each do |tag| %>
      <li>
        <%= tag.name %>
      </li>
    <% end %>
  <% end %>
于 2013-10-28T06:13:14.680 回答
0

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

于 2013-10-28T05:57:54.113 回答
0

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

于 2013-10-28T07:50:11.383 回答