Подзапрос в генерации отчетов Rails - PullRequest
2 голосов
/ 24 июня 2009

Я создаю отчет в приложении Ruby on Rails и пытаюсь понять, как использовать подзапрос.

Каждый 'Survey' имеет_many 'SurveyResponses', и их достаточно просто получить, однако мне нужно сгруппировать их по одному из полей, 'jobcode', так как я хочу сообщить только информацию, касающуюся одного кода задания одна строка в отчете.

Однако мне также нужно знать составляющие данные, которые составляют итоги по этому коду работы. Причина этого заключается в том, что мне нужно рассчитать такие данные, как медианы и стандартные отклонения, и поэтому мне нужно знать значения, которые составляют общую сумму.

Я думаю, что я получаю различные рабочие коды, о которых сообщалось для опроса, а затем, просматривая их, я получаю отдельные ответы для каждого рабочего кода.

Это правильный способ сделать это, или я должен следовать другому методу?

Ответы [ 2 ]

2 голосов
/ 24 июня 2009

Вы можете использовать именованную область видимости, чтобы упростить получение групп ответов:

named_scope :job_group, lambda{|job_code| {:conditions => ["job_code = ?", job_code]}}

Поместите это в свою модель ответа и используйте ее следующим образом:

job.responses.job_group('some job code')

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

r = job.responses.job_group('some job code')
r.map(&:total)
=> [1, 5, 3, 8]

В качестве альтернативы вы можете быстрее написать собственный SQL, чтобы получить среднее / среднее / сумму групп атрибутов. Прохождение рельсов для такой работы может привести к значительному отставанию.

ActiveRecord::Base.connection.execute("Custom SQL here")
1 голос
/ 09 июня 2010

Вы также можете использовать Model.find_by_sql ()

Например:

class User < Activerecord::Base
  # Your usual AR model
end

...

def index
  @users = User.find_by_sql "select * from users"
  # etc
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...