我已经在我的.html.erb文件中编写了代码,但我认为在我的控制器中编写它可能更有意义吗?此代码返回所有名称。我试图弄清楚如何只获取一次标记名称,如果用户输入已经使用过的标记名称,它就不会再显示。
<ul>
<% @pictures.each do |pic| %>
<% pic.tags.each do |tag| %>
<li>
<%= tag.name %>
</li>
<% end %>
<% end %>
</ul>
答案 0 :(得分:1)
使用Enumerable#flat_map
和Array#uniq
:
<ul>
<% @pictures.flat_map { |pic| pic.tags.map(&:name) }.uniq.each do |name| %>
<li>
<%= name %>
</li>
<% end %>
</ul>
答案 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。