Rails: Как усреднить несколько записей базы данных после создания - PullRequest
0 голосов
/ 22 января 2012

Рельсы 3.1

Я упросту заявку, чтобы ответить на мой вопрос.

У меня есть две таблицы: предметы и обзоры

Предметы имеют столбец «Average_Rating», а «Обзоры» имеют столбцы «Item_ID» и «Rating»

Для каждого элемента я хотел бы сохранить средний рейтинг для соответствующих отзывов. Хотя я не могу понять это, мне кажется, что я хочу добавить что-то к методам создания и обновления в Контроллере Обзоров в соответствии с:

@review = Review.find(params[:id])
@item = Item.find(@review.Item_ID)

reviews_to_sum = Reviews.find_by_item_id(@item.id)
@item.Average_Rating = reviews_to_sum.Rating.sum/reviews_to_sum.count

Однако я признаю, что вышеприведенное, вероятно, не совсем правильно ... Я новичок и застрял.

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

1 Ответ

3 голосов
/ 22 января 2012
class Item < ActiveRecord::Base
  has_many :reviews
end

class Review < ActiveRecord::Base
  belongs_to :item

  after_save do
    item.update_attributes average_rating: item.reviews.average(:rating)
  end
end
...