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
[/ruby]
<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)'})
