2012-06-01 2 views
2

Rails добавляет и заполняет столбец created_at для новых записей.Как считать «дни с записями» в Rails?

Как использовать счетчик для подсчета количества дней, у которых есть записи в течение заданного периода времени? (примечание: подсчет дней, не считая записей).

Например, скажем, у меня есть модель Post, как я могу рассчитать, сколько дней прошло в прошлом году Post?

+0

вы хотите сделать это с рубином или Arel? – austinbv

+0

Спасибо austinbv. Рубин. –

ответ

4

Поскольку вы просили рубинового образом, здесь:

Post.where('created_at >= ?', 1.year.ago).map { |p| p.created_at.beginning_of_day }.uniq.size 

Update

Вы можете поместить следующее сообщение модели

def self.number_of_days 
    where('created_at >= ?', 1.year.ago).map { |p| p.created_at.beginning_of_day }.uniq.size 
end 

Тогда в контроллере вы можете делать такие вещи, как

@user.posts.number_of_days 

Вот более эффективный способ, чтобы делегаты большинства работы с базой данных (MySQL, не уверен, если она будет работать на других):

Post.where('created_at >= ?', 1.year.ago).group('DATE(created_at)').length 
+0

спасибо xnm. Я хочу использовать это в представлении, например '@ user.number_of_post_days'. Как реализовать свое решение? Определите свой запрос в контроллере с переменной экземпляра, а затем вызовите его в представлении? Или есть море эффективный подход, учитывая мой прецедент? –

+0

Вы можете просто назначить его любой переменной экземпляра в контроллере, и она будет доступна для представления. '@ number_of_post_days' будет в порядке. – bkconrad

+0

Я обновил свой ответ, чтобы ответить на этот вопрос. –

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