docbrown/app/models/rating_vote.rb
Abraham Williams 9cb40e546b Enables Rails cops (#2186)
* Enable Rails cops

* Fix Rails/DynamicFindBy

* Fix Rails/HttpStatus

* Fix Rails/Blank

* Fix Rails/RequestReferer

* Fix Rails/ActiveRecordAliases

* Fix Rails/FindBy

* Fix Rails/Presence

* Fix Rails/Delegate

* Fix Rails/Validation

* Fix Rails/PluralizationGrammar

* Fix Rails/Present

* Fix Rails/Output

* Fix Rails/Blank

* Fix Rails/FilePath

* Fix Rails/InverseOf

* Fix Rails/LexicallyScopedActionFilter

* Add Rails/OutputSafety to TODO

* Add Rails/HasManyOrHasOneDependent to TODO

* Add Rails/SkipsModelValidations to TODO
2019-03-25 09:25:55 -04:00

25 lines
867 B
Ruby

class RatingVote < ApplicationRecord
belongs_to :article
belongs_to :user
validates :user_id, uniqueness: { scope: :article_id }
validates :group, inclusion: { in: %w[experience_level] }
validates :rating, numericality: { greater_than: 0.0, less_than_or_equal_to: 10.0 }
validate :permissions
counter_culture :article
counter_culture :user
def assign_article_rating
ratings = article.rating_votes.where(group: group).pluck(:rating)
average = ratings.sum / ratings.size
article.update_column(:experience_level_rating, average)
article.update_column(:experience_level_rating_distribution, ratings.sort.max - ratings.sort.min)
article.update_column(:last_experience_level_rating_at, Time.current)
end
private
def permissions
errors.add(:user_id, "is not permitted to take this action.") unless user&.trusted
end
end