On Sunday, June 11, 2017 at 9:04:14 PM UTC-7, Greg Gilbert wrote:
>
> There have been a few posts over the years about this, but I was wondering 
> what the latest and greatest approach is.
>
> Suppose you have Orders and Products, and a purchase is done in a join 
> table called :orders_products. The join table has another field, 
> 'quantity', indicating how many of the Products were in the Order. How 
> would you store, and also query and return the value of, :quantity?
>
> class Order < Sequel::Model
>   many_to_many :products, through: :order_product
> end
>
> class Product < Sequel::Model
>   many_to_many :orders, through: :order_product  
> end
>
> class OrderProduct < Sequel::Model(:orders_products)
>   many_to_one :order
>   many_to_one :product
>   Integer :quantity
> end
>
> I believe this is correct so far. Here are my questions:
>
>
>    1. Rather than using order.add_product, you'd do something like 
> OrderProduct.new(order: 
>    order, product: product, quantity: 23). Is that still the best way to 
>    do this, or is there a better way?
>
> Using OrderProduct.new would be a better way.
 

>
>    1. When getting order.products, how would you also get the quantity?
>
> Use the :select=>[Sequel[:products].*, 
Sequel[:orders_products][:quantity]] association option
 

>
>    1. How would you update the value of quantity in the join table for an 
>    Order that already exists?
>
> DB[:orders_products].where(:order_id=>order_id, 
:product_id=>product_id).update(:quantity=>quantity)
 

>
>    1. I saw references to the dataset_associations plugin and some 
>    others. How would those work here?
>
> As they usually do, I don't think there's anything special related to this 
circumstance.

Thanks,
Jeremy 

-- 
You received this message because you are subscribed to the Google Groups 
"sequel-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sequel-talk.
For more options, visit https://groups.google.com/d/optout.

Reply via email to