Add vote functionality to tracks

This commit is contained in:
Rishabh Singh 2019-08-09 17:33:42 +05:30
parent 8b2f2b538e
commit 92b09c7de4
18 changed files with 237 additions and 19 deletions

View file

@ -15,6 +15,8 @@ class Track < ApplicationRecord
has_paper_trail ignore: [:updated_at], meta: { conference_id: :conference_id }
has_many :votes, as: :votable
has_many :voters, through: :votes, source: :user
before_create :generate_guid
validates :name, presence: true
validates :color, format: /\A#[0-9A-F]{6}\z/
@ -100,6 +102,25 @@ class Track < ApplicationRecord
short_name
end
def user_rating(user)
(vote = votes.find_by(user: user)) ? vote.rating : 0
end
def voted?(user = nil)
return votes.where(user: user).any? if user
votes.any?
end
def average_rating
@total_rating = 0
votes.each do |vote|
@total_rating += vote.rating
end
@total = votes.size
@total_rating.positive? ? number_with_precision(@total_rating / @total.to_f, precision: 2, strip_insignificant_zeros: true) : 0
end
def transition_possible?(transition)
self.class.state_machine.events_for(current_state).include?(transition)
end