Запросы в стиле .map с использованием .where в ActiveRecord - PullRequest
1 голос
/ 27 октября 2011

Возьмем такой сценарий:

Чтобы просмотреть счетчики всех товаров, я могу написать:

@counts = Item.all.collect{|i| i.companies.count}

Можно ли сделать аналогичную вещь с .where, чтобы вернуть ТОЛЬКОте элементы, которые имеют count > 0?

@items_with_companies = Item.where{|i| i.companies.count > 0}

Для ясности Мне не нужен конкретный ответ на приведенный выше случай - я ищу общее решение, которое позволило бы далекобольше гибкости в моих запросах, чем я сейчас использую!

1 Ответ

2 голосов
/ 27 октября 2011

Наиболее эффективный способ сделать это - добавить столбец кэша счетчика в Item

class Item
  # items must have a column named companies_count
  has_many :companies, :counter_cache => true
  scope :with_companies, where('companies_count>0')
end

Существуют и другие способы, например, выполнение подзапросов или объединение и группирование и подсчет.* Важно то, что все, что вы пишете в where, будет выполняться в базе данных, поэтому оно ограничено тем, что может делать SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...