Rails: получение массива значений из модели за период времени - PullRequest
5 голосов
/ 23 января 2010

Итак, у меня есть две модели, Пользователь и Вещи.

User
  has_many :things
end

Thing
  belongs_to :user
end

Thing имеет дату, связанную с ним. Пользователь может добавить ноль в один день, и 4 на следующий, и 7 на следующий день после этого, а затем ноль в течение нескольких дней. Вы поняли.

Теперь я хотел бы получить массив значений за последние 7 дней. Сколько вещей добавил пользователь? Я хочу убедиться, что он включает нули в те дни, когда ничего не было добавлено. Например, он может вернуть [0, 4, 7, 0, 0, 11, 2].

Это еще один пример того, что, я уверен, довольно легко сделать, но мой гугл-фу меня подводит. : -)

Спасибо!

Ответы [ 2 ]

2 голосов
/ 23 января 2010

Предложение Роба приведет к 7 запросам.

Вот как это сделать в одном запросе:

things_by_date = user.things.count(:group => 'DATE(created_at)', :conditions => ['DATE(created_at) > ?', 7.days.ago])
(1..7).collect { |d| things_by_date[d.days.ago.to_date.to_s] || 0 }
1 голос
/ 23 января 2010

Как насчет чего-то вроде

class User < ActiveRecord::Base
  def counts_for_last_week
    (1..7).collect {|i| things.count(:conditions=>["thing_date = ?', i.days.from_now])]
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...