我如何获得“孩子”记录的平均数量?

时间:2012-02-15 19:14:35

标签: ruby-on-rails ruby ruby-on-rails-3

我有一个Survey模型,每个调查has_many questions和每个question belongs_to survey

我要做的是找出每项调查的平均问题数量。

最简单的方法是什么?

我正在运行Rails 3.0.9和Ruby 1.8.7。

1 个答案:

答案 0 :(得分:2)

questions_count表上可以有surveys列,可用于缓存此数字。如果您在belongs_to :survey模型中指定了Question,则可以自动完成此操作:

belongs_to :survey, :counter_cache => true

但是现在您实际上已经获得了调查和问题,您将需要创建此列,然后在迁移更新中将计数更正为正确:

def up
  add_column :surveys, :questions_count, :integer, :default => 0
  Survey.all.each do |survey|
    survey.questions_count = survey.questions.count
    survey.save
  end
end

然后,一旦你有了这个专栏,这是一个简单的ARel查询来找到平均值:

Survey.average(:questions_count)

除此之外,您现在可以自动计算问题,而无需在加载调查后在问题表上进行其他查询。如果你想在某处显示它,这将非常有用。