Rails 3: Как мне работать с методами на связанном объекте? - PullRequest
1 голос
/ 22 ноября 2011

Я обновляю сайт с помощью Rails 3.1 и добавляю некоторые функции. Это приложение отслеживает тесты для коллекции сайтов. Первоначально я сохранял оценку для каждого теста в виде столбца в таблице «Тесты», но теперь я создал новую модель под названием «Обзоры», чтобы сохранить историю оценок и комментариев, назначенных каждому тесту. Модели выглядят так:

class Site < ActiveRecord::Base
  has_many :tests
  has_many :reviews, :through => :tests

class Test < ActiveRecord::Base
  has_many :reviews
  belongs_to :site

class Review < ActiveRecord::Base
  belongs_to :test
  has_one :user

Ранее я мог сделать что-то подобное в модели сайта, чтобы получить некоторые отчетные данные по оценкам:

def total_a_grades
  tests.count(:conditions => "reviewer_grade = 4 and review_status = 3")
end

Поскольку оценки теперь не соответствуют тестовой модели, я создал этот метод для доступа к самой последней оценке для каждого теста:

def last_grade
  return reviews.find(:last).grade
end

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

Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 05 декабря 2011

Метод join позволяет получить доступ к атрибутам has_many: через ассоциации.Или начните с требуемой ассоциации, и необходимые объединения будут включены для вас.

  tests.joins(:reviews).where("reviews.grade = 5").count

  reviews.where("grade = 5").count

источники:

...