Forum: Ruby on Rails Sale, pop and product

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
A99d18bdbe7936f65e51e9602e2e2115?d=identicon&s=25 Bruno Sousa (brgsousa)
on 2009-05-28 00:29
Hi,
I couldn't find a better word for pop, but let's go:
There are 3 models: sale, pop and product

sale:
  -total:integer
pop:
  -quantity:integer
  -discount:float
product:
  -name:string
  -price:float

A sale can have many different products, each one has a quantity and
discount associated.
So each sale has_many :products through => pops
And each product has_many :sales through => pops

For example:
+-------------------------------------------+
|--> Sale 1   <--> Pop 1     <--> Product 1 |
|                  qty = 20                 |
|                  disc= 0.1                |
|             <--> Pop 2     <--> Product 2 |
|                  qty = 10                 |
|                  disc=0                   |
+-------------------------------------------+
|--> Sale 2   <--> Pop 3     <--> Product 3 |
|                  qty = 4                  |
|                  disc= 0.5                |
|             <--> Pop 4     <--> Product 1 |
|                  qty = 5                  |
|                  disc=0                   |
+-------------------------------------------+

By the time I associate a sale with a product I need to especify
quantity and discount because Sale's model has validations that uses
quantity and discount values.

In rails console:
s = Sale.new
p = Product.new
p.save
s.products << Product.last
s.save

This way I can't use pops columns before saving the sale. How can I do
that?
2505b282d57c29be797dc35b245adb4c?d=identicon&s=25 Philip Hallstrom (Guest)
on 2009-05-28 00:47
(Received via mailing list)
Not sure how helpful my comments will be, but...

Sale = Order
Pop = LineItem
Product = Product

An Order has many LineItems.  A LineItem belongs to an Order.  A
LineItem has one Product.

The LineItem model should have fields for quantity, discount, and the
price of the product at the time the order was placed.

The Order model should only need to look at it's LineItems to
determine the total price.

Don't know if that will help work your way through the issue or not...
if not, ignore me :)

-philip
A99d18bdbe7936f65e51e9602e2e2115?d=identicon&s=25 Bruno Sousa (brgsousa)
on 2009-05-28 06:08
Thanks for your help!

I got this code:
1. s = Sale.new
2. p = Product.new
3. p.save
pop = s.pops.build(:qty => 10, :disc = 0) #associates pop with sale and
puts it in the collection
4. pop.product = p
5. s.save #saves sale and pop
A99d18bdbe7936f65e51e9602e2e2115?d=identicon&s=25 Bruno Sousa (brgsousa)
on 2009-05-28 06:30
Just found out that "pops" callbacks simply do not work.
for example:
class Sale
  has_many :pops, :dependent => :destroy
end

class Pop
  before_destroy :do_something
end

if I destroy a sale that has a pop associated, before_destroy from Pop
is not called.

why that happens?
A99d18bdbe7936f65e51e9602e2e2115?d=identicon&s=25 Bruno Sousa (brgsousa)
on 2009-06-09 05:56
Any ideas how can this be used in new/create views?

Bruno Sousa wrote:
> Thanks for your help!
>
> I got this code:
> 1. s = Sale.new
> 2. p = Product.new
> 3. p.save
> pop = s.pops.build(:qty => 10, :disc = 0) #associates pop with sale and
> puts it in the collection
> 4. pop.product = p
> 5. s.save #saves sale and pop
This topic is locked and can not be replied to.