2011-11-07 4 views
1

У меня есть модель решений, с has_many Отзывы и обзоры с 'has_many' ReviewValues. Каждый ReviewValue также связан с тегом, который содержит имя тега. Я пытаюсь выбрать avarage scores (для всех тегов, сгруппированных по тегам), которые идут с определенным решением.Запрос ActiveRecord для связанных элементов

В основном модель Отзывы является таблицу соединения между Solutions и ReviewValues ​​(а также таблица Теги, которая содержит имена)

То, что я до сих пор это:

@total = self.reviews.review_values.average(:score) 

Проблема заключается в том что я могу только вызвать review_values ​​для одного конкретного обзора, а не для всех из них. так что я должен был бы сделать что-то вроде self.reviews.first.review_values..., который не помогает мне, потому что мне нужно в среднем для каждого reviewvalue (по имени тега)

Это то, что таблица review_values ​​выглядит следующим образом:

Table review_values 
=================== 
id, tag_id, review_id, score, created_at, updated_at 
------------------- 
id    int(11) PK 
tag_id   int(11) 
review_id  int(11) 
score   int(11) 
created_at  datetime 
updated_at  datetime 

И таблица тегов:

Table tags 
========== 
id, name 
---------- 
id    int(11) PK 
name    varchar(255) 

ответ

1

Вы пытались использовать: через? например:

class Solution 
    has_many :reviews 
    has_many :review_values, :through => :reviews 
end 

@total = my_solution.review_values.average(:score) 
+0

Это похоже на работу. Любая идея, как я могу получить среднее значение для каждого tag_id? – networkprofile

+0

Хороший вопрос - это как «двойной сквозной» там? т.е. review_values ​​have_many tags? ", если это так - это может быть немного сложнее ... Я не думаю, что я когда-либо пробовал использовать двойной проход раньше. Но может быть, стоит просто пойти на это (например,« Решение has_many теги: через: review_values ​​") –

+1

Я смог сделать это с помощью команды join: средние = self.review_values.joins (: tag) .group (: tag) .average (: score)' спасибо за вашу помощь! – networkprofile

Смежные вопросы