在条件下求和列值

时间:2011-07-21 10:41:44

标签: ruby-on-rails-3

假设:

作品表

Name
created_at
Size

我想列出所有作品,最后总结所有尺寸值,但在一个条件下。 created_at必须是< 1年前。

我知道

@works.sum(&:size)

有效,但不会过滤掉'created_at'部分。

然后我到了这里     @ works.sum(&:size,:conditions => ['created_at>?',1.year.ago])

但是继续得到关于期望a的编译错误而不是a,

请帮忙吗?有没有更好的方法来实现这个目标?

2 个答案:

答案 0 :(得分:4)

您可以使用范围来保持模型清洁

#controller
class WorksController < ApplicationsController

  def index
    @works.recent.sum(&:size)
  end
end

#model
class Work
 scope :recent, ->{ where('created_at > ?', 1.year.ago) }
end

答案 1 :(得分:0)

这对我有用:

@works.where('created_at > ?', 1_year_ago).sum(:size)