Many to Many m:n Association

order has many products, products has many orders.
In that case, we need one more table to make association.

Example

rails generate model product name 'price:decimal{7,2}'
rails generate model order delivery_address
rails generate model line_item order_id:integer product_id:integer quantity:integer

Model class

order.rb

class Order < AcriveRecord::Base
   has_many :line_items
   has_many :products, :through => :line_items
end

product.rb

class Product < AcriveRecord::Base
   has_many :line_items
   has_many :orders, :through => :line_items
end

lineitem.rb

class LineItem < ActiveRecord::Base
   belongs_to :order
   belongs_to :product
end
&#91;/ruby&#93;

<h3>Database</h3>
Product
<pre>
id:integer
price:decimal{7,2}
</pre>
Order
<pre>
stirng:delivery_address
</pre>
LineItems
<pre>
order_id:integer
product_id:integer
quantity:integer
</pre>

<h3>Create</h3>
[ruby]
milk = Product.create(name:'Milk(1 litter)', price:0.45)
butter = Product.create(name:'Bugger(250 gr)', price:0.75)
flour = Product.create(name:'Flour(1kg)', price:0.45)

order = Order.new(delivery_address:'Queen Street11')
order.products.count
order.line_items.create(product_id:butter.id, quantity:2)
order.products
Order.first.products
order.reload   # order is updated
order.products

order2 = Order.create(delivery_address:'2 Hill Street')
order2.products << Product.all
order2.save
Product.first.orders

Order.joins(:products).where(:products => {name:'Milk(1 litter)'})