Как бы я мог получить среднее количество «дочерних» записей? - PullRequest
0 голосов
/ 15 февраля 2012

У меня есть Survey модель и каждый опрос has_many questions и каждый question belongs_to survey.

Что я пытаюсь сделать, это найти среднее количество вопросов, которое имеет каждый опрос.

Какой самый простой способ это осуществить?

Я использую Rails 3.0.9 и Ruby 1.8.7.

1 Ответ

2 голосов
/ 15 февраля 2012

В таблице 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)

В дополнение к этому теперь вы можете получать количество вопросов автоматически, не выполняя еще один запрос в таблице вопросов после загрузки опросов.Это было бы очень полезно, если вы хотите отобразить это где-то.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...