belongs_to :customer
belongs_to :rentable
+ # Make sure the user typed in the ids
validates_presence_of :customer_id
validates_presence_of :rentable_id
+ # Make sure the user typed in numbers
+ validates_numericality_of :customer_id
+ validates_numericality_of :rentable_id
+
+ # Make sure this rentable was not already checked out
validates_uniqueness_of :rentable_id
+ # Make sure the associated rentable and customer are valid and exist
validates_associated :customer
validates_associated :rentable
+
+ def overdue?
+ return due_date < Time.now.to_date
+ end
+
+ def late_fee
+ days_late = Time.now.to_date - (due_date)
+ return VideoPolicy.find_by_day(8).fee * days_late.to_i
+ end
+
+ protected
+ def validate
+ errors.add(:customer_id, "does not exist is the database") if customer.nil?
+ errors.add(:rentable_id, "does not exist in the database") if rentable.nil?
+ end
end