9.3 Iteration D3: Adding a button 9.1 Iteration D1: Finding a Cart
Create line item which connects products to carts'
Create the model object.
rails generate scaffold LineItem product_id:integer cart_id:integer
invoke active_record
create db/migrate/20100606143405_create_line_items.rb
create app/models/line_item.rb
invoke test_unit
create test/unit/line_item_test.rb
create test/fixtures/line_items.yml
route resources :line_items
invoke scaffold_controller
create app/controllers/line_items_controller.rb
invoke erb
create app/views/line_items
create app/views/line_items/index.html.erb
create app/views/line_items/edit.html.erb
create app/views/line_items/show.html.erb
create app/views/line_items/new.html.erb
create app/views/line_items/_form.html.erb
invoke test_unit
create test/functional/line_items_controller_test.rb
invoke helper
create app/helpers/line_items_helper.rb
invoke test_unit
create test/unit/helpers/line_items_helper_test.rb
invoke stylesheets
identical public/stylesheets/scaffold.css
rake db:migrate
mv 20100606143405_create_line_items.rb 20100301000003_create_line_items.rb
(in /home/rubys/svn/rails4/Book/util/work-193/depot)
== CreateLineItems: migrating ================================================
-- create_table(:line_items)
-> 0.0019s
== CreateLineItems: migrated (0.0019s) =======================================
Cart has many line items.
edit app/models/cart.rb
class Cart < ActiveRecord::Base
has_many :line_items, :dependent => :destroy
end
Product has many line items.
edit app/models/product.rb
class Product < ActiveRecord::Base
has_many :line_items
before_destroy :ensure_not_referenced_by_any_line_item
# ensure that there are no line items referencing this product
def ensure_not_referenced_by_any_line_item
if line_items.count.zero?
return true
else
errors[:base] << "Line Items present"
return false
end
end
#...
Line item belongs to both Cart and Product (But slightly more to the Cart). Also provide convenient access to the total price of the line item
edit app/models/line_item.rb
class LineItem < ActiveRecord::Base
belongs_to :product
belongs_to :cart
end
9.3 Iteration D3: Adding a button 9.1 Iteration D1: Finding a Cart