Вы получаете синтаксическую ошибку, потому что пытаетесь смешать аргументы implicit-Hash и implicit-Array:
Monitoring.exists?(:outlet_id => outlet.id, 'DATE(created_at) = ?', Date.today)
Методы exists?
хотят использовать Hash в качестве единственного аргумента. Вы хотите использовать функцию SQL в запросе, но это означает, что вы должны использовать форму Model.where(...).exists?
:
Monitoring.where(:outlet_id => outlet.id).where('date(created_at) = ?', Date.today).exists?
Это все еще оставляет вас снова и снова нажимать на базу данных, чтобы зажечь ваши огни. Вы можете предварительно вычислить весь беспорядок с чем-то вроде этого:
counts = Monitoring.where('date(created_at) = ?', Date.today).count(:group => :outlet_id)
А затем посмотрите, используйте counts.has_key? outlet.id
в вашем цикле. Добавление where(:outlet_id => outlet_ids)
(где outlet_ids
- идентификаторы, которые вас интересуют) также может иметь смысл. Возможно, вы сможете объединить запрос count
с запросом, который также генерирует @outlets
.