Module: Mongoid::Letsrate
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/mongoid/letsrate/model.rb,
lib/mongoid/letsrate/version.rb
Defined Under Namespace
Modules: ClassMethods
Constant Summary collapse
- VERSION =
'1.0.14'
Instance Method Summary collapse
- #can_rate?(user) ⇒ Boolean
- #rate(stars, user) ⇒ Object
-
#rating ⇒ Object
The average rating.
- #update_rate_average(stars) ⇒ Object
Instance Method Details
#can_rate?(user) ⇒ Boolean
44 45 46 |
# File 'lib/mongoid/letsrate/model.rb', line 44 def can_rate?(user) user..where(rateable_id: id, rateable_type: self.class.name).size.zero? end |
#rate(stars, user) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 |
# File 'lib/mongoid/letsrate/model.rb', line 8 def rate(stars, user) if can_rate? user rates.create! do |r| r.stars = stars r.rater = user end update_rate_average(stars) else raise 'User has already rated.' end end |
#rating ⇒ Object
The average rating
21 22 23 |
# File 'lib/mongoid/letsrate/model.rb', line 21 def average ? average.avg : 0 end |
#update_rate_average(stars) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/mongoid/letsrate/model.rb', line 25 def update_rate_average(stars) if average.nil? RatingCache.create! do |avg| puts "About to create average" avg.cacheable_id = self.id avg.cacheable_type = self.class.name avg.avg = stars avg.qty = 1 end else puts "Found average" a = average all_stars = rates.map &:stars a.avg = all_stars.inject { |sum, value| sum + value } / all_stars.size a.qty = rates.count a.save!(validate: false) end end |