Skip to content

Instantly share code, notes, and snippets.

@davidwessman
Last active June 27, 2016 11:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save davidwessman/017fdbb953231da6e8992fff5394b2b3 to your computer and use it in GitHub Desktop.
Save davidwessman/017fdbb953231da6e8992fff5394b2b3 to your computer and use it in GitHub Desktop.
class OrderItem < ActiveRecord::Base
belongs_to :product, required: true
belongs_to :order, required: true
has_one :user, through: :order
validates :quantity, presence: true, numericality: { only_integer: true, greater_than: 0 }
validate :user_limited
before_save :finalize
def unit_price
if persisted?
self[:unit_price]
else
product.price
end
end
def total_price
unit_price * quantity
end
private
def finalize
self[:unit_price] = unit_price
self[:total_price] = quantity * self[:unit_price]
end
def user_limited
unless user.nil? || user.allowed_to_order?
errors.add(:user, "not allowed do more orders before #{user.new_order_date}")
end
end
class User
has_many :orders
def allowd_to_order?
order_count < 3 || days_since_order > 30
end
def days_since_order
Date.today - begin_date rescue 0
end
end
class Order
belongs_to :user
has_many :order_items
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment