我有一个Survey
模型,每个调查has_many questions
和每个question belongs_to survey
。
我要做的是找出每项调查的平均问题数量。
最简单的方法是什么?
我正在运行Rails 3.0.9和Ruby 1.8.7。
答案 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)
除此之外,您现在可以自动计算问题,而无需在加载调查后在问题表上进行其他查询。如果你想在某处显示它,这将非常有用。