Skip to content

Instantly share code, notes, and snippets.

@krupenik
Created September 17, 2012 01:32
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 krupenik/3735116 to your computer and use it in GitHub Desktop.
Save krupenik/3735116 to your computer and use it in GitHub Desktop.
irb(main):055:0> o = Order.last
Order Load (0.4ms) SELECT "orders".* FROM "orders" ORDER BY "orders"."id" DESC LIMIT 1
=> #<Order id: 143, customer_id: 13, session_id: "5c7f3b0268022483ed1c87ff9fb5304a", state: nil, discount: #<BigDecimal:7fe419d863f0,'0.0',9(18)>, balance: #<BigDecimal:7fe419d86328,'0.0',9(18)>, notes: nil, shipping_method: nil, shipping_details: nil, created_at: "2012-09-16 17:27:39", updated_at: "2012-09-16 21:09:56">
irb(main):056:0> oi = o.order_items.includes(item: :photos)
OrderItem Load (0.4ms) SELECT "order_items".* FROM "order_items" WHERE "order_items"."order_id" = 143
Item Load (0.2ms) SELECT "items".* FROM "items" WHERE "items"."id" IN (227)
Photo Load (0.1ms) SELECT "photos".* FROM "photos" WHERE "photos"."item_id" IN (227)
=> [#<OrderItem id: 302, order_id: 143, item_id: 227, item_price: #<BigDecimal:7fe4198f21b8,'0.5E2',9(18)>, quantity: 1, size: 95, type: "rent", starts_on: "2012-09-17", ends_on: "2012-09-18", created_at: "2012-09-16 20:03:33", updated_at: "2012-09-16 21:09:56">]
irb(main):057:0> o.order_items
OrderItem Load (0.4ms) SELECT "order_items".* FROM "order_items" WHERE "order_items"."order_id" = 143
=> [#<OrderItem id: 302, order_id: 143, item_id: 227, item_price: #<BigDecimal:7fe4199014b0,'0.5E2',9(18)>, quantity: 1, size: 95, type: "rent", starts_on: "2012-09-17", ends_on: "2012-09-18", created_at: "2012-09-16 20:03:33", updated_at: "2012-09-16 21:09:56">]
irb(main):058:0> o.total
Item Load (0.4ms) SELECT "items".* FROM "items" WHERE "items"."id" = 227 LIMIT 1
=> #<BigDecimal:7fe419907310,'0.5E2',9(36)>
class Item < ActiveRecord::Base
has_many :order_items
has_many :orders, through: :order_items
attr_accessible :rent_price, :sale_price
end
class Order < ActiveRecord::Base
has_many :order_items, dependent: :destroy
def total
order_items.map(&:price).reduce(:+)
end
end
class OrderItem < ActiveRecord::Base
belongs_to :item
belongs_to :order
attr_accessible :type, :quantity
def item_price
item.send("#{type}_price")
end
def price
quantity * item_price
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment