2013-11-21 4 views
0

Я начинаю рельсы, и я попытался написать простое приложение, в котором пользователь может создавать некоторые продукты. Итак, теперь я создаю сайт статистики, где я хочу отображать среднее количество продуктов, которые были созданы днем.Среднее количество товаров, созданных за день

Так что моя идея состояла в том, чтобы вычислить:

@average_amount = Days_where_products_were_created/Products.all.count 

Так что моя проблема в том, что я не знаю, как я могу проверить, сколько дней продукты были созданы? Есть простой метод? Благодаря!

ответ

1

Если вы хотите сделать среднее значение по всем записям, вы можете использовать вычисления, доступные из ActiveRecord, для поиска ваших самых старых и новейших записей.

oldest = Products.minimum(:created_at) 
newest = Products.maximum(:created_at) 

Теперь вы можете создать диапазон с этими переменными. Для простоты конвертируйте Time объектов в Date для использования в ассортименте.

days_where_products_were_created = (oldest.to_date..newest.to_date).count 

EDIT

Если вы хотите, чтобы ваши базы в среднем только даты, когда были созданы продукты, которые Вы могли бы срывать created_at Time, преобразовать его в Date, чтобы избавиться от времени, и считать уникальным значения.

days_where_products_were_created = Products.pluck(:created_at).collect(&:to_date).uniq.count 
+0

Проблема заключается в том, что есть также даты, когда не было создано продукта между 'oldest.to_date' и' newest.to_date' –

0

Среднее количество продуктов создано вчера:

@average_amount = Products.all.count/Products.where(created_on: Date.yesterday.beginning_of_day..Date.yesterday.end_of_day).count 

создано сегодня:

@average_amount = Products.all.count/Products.where(created_on: Date.today.beginning_of_day..Date.today.end_of_day) 

создано 4 дня назад:

@average_amount = Products.all.count/Products.where(created_on: (Date.today.beginning_of_day-4.days)..(Date.today.end_of_day-4.days)).count 

Обратите внимание, что в вашем коде, кажется, как ваша модель называется Products. Это должно быть Product вместо этого, так как это соглашение Rails для имен моделей должно быть записано в единственной форме.

Принимая это шаг вперед, делая код для повторного использования:

from_date = Date.today - 4.days 
to_date = Date.today 

@average_amount = Product.all.count/Product.where(created_on: from_date.beginning_of_day..to_date.end_of_day).count 

Таким образом, у вас есть только редактировать from_date & to_date переменных соответственно.

+0

Спасибо, но я хочу знать сумму в течение нескольких дней! –

+0

@JohnSmith Обновлен мой первоначальный ответ. – Agis

Смежные вопросы