如何显示包含0个赞的项目?

时间:2019-04-23 03:26:50

标签: ruby-on-rails

我想显示带有排名的项目。我想显示即使没有的项目。我试图编写如下代码。但是不会显示0之类的项目。你有个好主意吗?

  def show
    @all_ranks = Item.find(Like.group(:item_id).order('count(item_id) desc').pluck(:item_id))
    @ranking_item = @all_ranks.select{ |item| item.category_id == @category.id }
  end

1 个答案:

答案 0 :(得分:0)

您需要LEFT JOIN

您还可以使用 where 语句来优化您的方法,以仅获取具有特定类别的项目。因此,您的方法应如下所示:

def show    
  @rating_items = Item.select('items.id', 'COUNT(*) AS likes_count')
                      .joins('JOIN likes ON likes.item_id = items.id')
                      .where('items.category_id' => @category.id)
                      .group('items.id')
                      .order('likes_count DESC')
end

并且在视图中,您可以使用如下代码:

<% @rating_items.each do |item| %>
  <p><%= "#{item.id} - #{item.likes_count}" %></p>
<% end %>

我不知道您使用的是哪个Rails版本。如果使用Rails 5. *,可以看一下left_joins方法。因此,对于Rails 5. *,您可以尝试:

def show    
  @rating_items = Item.select('item.id', 'COUNT(*) AS likes_count')
                      .left_joins(:likes)
                      .where('items.category_id' => @category.id)
                      .group('items.id')
                      .order('likes_count DESC')
end