Rails:在一段时间内从模型中获取一组值

时间:2010-01-23 18:53:21

标签: ruby-on-rails activerecord

所以,我有两个模型,User和Thing。

User
  has_many :things
end

Thing
  belongs_to :user
end

Thing有与之关联的日期。用户可能会在一天中添加零件,在下一天中添加4件,在此之后添加7件,然后在几天内添加零件。你明白了。

现在,我想得到的是过去7天的一系列值。用户添加了多少东西?我想确保在没有添加任何内容的日子里它包含零。例如,它可能会返回[0, 4, 7, 0, 0, 11, 2]

这是我确定相当容易做到的事情的另一个例子,但是我的google-fu让我失望了。 : - )

谢谢!

2 个答案:

答案 0 :(得分:2)

Rob的建议将导致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 :(得分:1)

这样的东西
class User < ActiveRecord::Base
  def counts_for_last_week
    (1..7).collect {|i| things.count(:conditions=>["thing_date = ?', i.days.from_now])]
  end
end