* 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
25 lines
867 B
Ruby
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
|