Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jun 17th, 2012  |  syntax: None  |  size: 1.05 KB  |  hits: 18  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. ## Grade.rb
  2.  
  3.  
  4. class Grade < ActiveRecord::Base
  5.  
  6.   validates_inclusion_of :letter, :in => %w( A B C D F )
  7.   before_save :translate_letter_to_score
  8.   belongs_to :user
  9.   validates_presence_of :user
  10.   validate :user_has_not_cast_grade_today
  11.  
  12.   attr_accessor :letter
  13.  
  14.   def self.decimal_average
  15.     self.average('score').round(2)
  16.   end
  17.  
  18.   def self.letter_average
  19.     { 4 => "A", 3 => "B", 2 => "C", 1 => "D", 0 => "F"}[Grade.decimal_average.round]
  20.   end
  21.  
  22.   def translate_letter_to_score
  23.     self.score = { "A" => 4, "B" => 3, "C" => 2, "D" => 1, "F" => 0}[letter]
  24.   end
  25.  
  26.   private
  27.  
  28.   def user_has_not_cast_grade_today
  29.     errors.add(:base, "Nice try, but you've already graded the President today! Come back tomorrow :-)") if user.grades.exists?(:created_at => DateTime.current.beginning_of_day..DateTime.current)
  30.   end
  31. end
  32.  
  33.  
  34. # == Schema Information
  35. #
  36. # Table name: grades
  37. #
  38. #  id         :integer         not null, primary key
  39. #  score      :float
  40. #  created_at :datetime
  41. #  updated_at :datetime
  42. #  user_id    :integer
  43. #