This commit is contained in:
Aaro Koivukangas
2023-08-10 11:44:01 +03:00
parent 23e6537a12
commit 47a476c71c
12 changed files with 76 additions and 36 deletions
+18 -27
View File
@@ -2,38 +2,29 @@ module RatingAverage
extend ActiveSupport::Concern
def average_rating
total_score = 0
count = 0
beers = if defined? self.beers
self.beers
else
self
end
beers.each do |beer|
count += beer.ratings.count
beer.ratings.each do |rating|
total_score += rating.score
end
if self.class == Beer
ratings = [self]
elsif self.class == Brewery
# creates empty arrays for beers that have no ratings
# + wraps the array in an array
ratings = beers.map { |b| b.ratings }.reject(&:blank?)[0]
elsif self.class == User
ratings = self.ratings
else
raise "Wrong class type for calculating average, #{self.class}"
end
return 0 unless count != 0
total_score / count
return 0 unless ratings.count > 0
ratings.map { |r| r.score }.sum / ratings.count.to_f
end
def count_ratings
beers = if defined? self.beers
self.beers
else
self
end
count = 0
beers.each do |beer|
count += beer.ratings.count
if self.class == Beer or User
return self.ratings.count
elsif self.class == Brewery
return self.beers.map { |b| b.ratings.count }.sum
else
raise "Wrong class type for counting ratings, #{self.class}"
end
count
end
end
+2 -1
View File
@@ -1,7 +1,8 @@
class Rating < ApplicationRecord
belongs_to :beer
belongs_to :user
def to_s
"tekstiesitys"
"#{self.beer.name}: #{self.score}"
end
end
+3
View File
@@ -1,2 +1,5 @@
class User < ApplicationRecord
include RatingAverage
has_many :ratings
end