我有一个产品显示页面,显示网站上的所有产品。在这里,我想按照其所有者过滤产品。首先,我使用每个循环在页面上显示所有者名称:
<% @products.each do |p| %>
<%= link_to p.user.profile.first_name, store_index_path %>
<% end %>
但由于拥有者有多个产品,他的名字会多次显示。如何只显示一次名称?
答案 0 :(得分:5)
以简单的方式,您可以这样做:
<% @products.map(&:user).uniq.each do |u| %>
<%= link_to u.profile.first_name, store_index_path %>
<% end %>
答案 1 :(得分:1)
您可以使用group_by创建User =&gt;的哈希值[产品]。然后,您遍历唯一的用户集,显示有关该所有者的信息,然后显示该用户的每个产品。
<% products_by_owner = @product.group_by(&:user) %>
<% products_by_owner.keys.each do |user| %>
<%= link_to p.user.profile.first_name, store_index_path %>
<% products_by_owner[user].each do |product| %>
<%= link_to product.name, store_index_path %>
<% end %>
<% end %>
答案 2 :(得分:0)
您可以使用group_by
创建哈希,将用户作为键和产品数组作为值:
# Eager loading of users will prevent multiple database hits.
# Using find:
@products = Product.find(:all, :include => :user).group_by(&:user)
# using relations:
@products = Product.where(:some_condition => 'etc').includes(:user).group_by(&:user)
在视图中:
<% @products.each do |user, user_products| %>
<%= link_to p.user.profile.first_name, store_index_path %>
<% user_products.each do |product| %>
...
<% end %>
<% end %>