3

ウェブサイトにすべての商品を表示している商品表示ページがあります。ここでは、所有者ごとに製品をフィルタリングしたいと思います。まず、各ループを使用してページに所有者名を表示しています。

<% @products.each do |p| %>
   <%= link_to p.user.profile.first_name, store_index_path %>
<% end %>

しかし、所有者は複数の製品を持っているため、彼の名前は複数回表示されます。名前を一度だけ表示するにはどうすればよいですか?

4

3 に答える 3

5

簡単な方法であなたはこのようにすることができます:

<% @products.map(&:user).uniq.each do |u| %>
  <%= link_to u.profile.first_name, store_index_path %>
<% end %>
于 2013-02-06T17:37:36.297 に答える
1

group_byを使用して、User=>[Products]のハッシュを作成できます。次に、一意のユーザーセットを繰り返し処理し、その所有者に関する情報を表示してから、そのユーザーの各製品を表示します。

<% 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 %>
于 2013-02-06T17:30:01.753 に答える
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 %>
于 2013-02-06T17:32:01.890 に答える