Вам нужно 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