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.
