Как я могу отобразить включаемый элемент имеет 0 как? - PullRequest
0 голосов
/ 23 апреля 2019

Я хочу отобразить элемент с рейтингом. И я хочу показать элемент, который не имеет ничего подобного. Я пытался написать код, как показано ниже. Но элемент с 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 голосов
/ 23 апреля 2019

Вам нужно LEFT JOIN .

Также вы можете оптимизировать свой метод, используя оператор , где , чтобы получить элементы только с определенной категорией.Таким образом, ваш метод может выглядеть так:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...