В таблице surveys
может быть столбец questions_count
, который можно использовать для кэширования этого числа.Это можно сделать автоматически, если вы указали 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)
В дополнение к этому теперь вы можете получать количество вопросов автоматически, не выполняя еще один запрос в таблице вопросов после загрузки опросов.Это было бы очень полезно, если вы хотите отобразить это где-то.