Agile Web Development with Rails, Edition 4

Agile Web Development with Rails, Edition 4

25.1 rack 21.2 Form Helpers

22 Active Resources

<"42.95"> expected but was
<"Using rake (0.8.7) ">.

Traceback:
  /home/rubys/svn/rails4/Book/util/checkdepot.rb:303

Restart the server.

ruby -rubygems /home/rubys/git/rails/bin/rails new depot_client
      create  
      create  README
      create  Rakefile
      create  config.ru
      create  .gitignore
      create  Gemfile
      create  app
      create  app/controllers/application_controller.rb
      create  app/helpers/application_helper.rb
      create  app/mailers
      create  app/models
      create  app/views/layouts/application.html.erb
      create  config
      create  config/routes.rb
      create  config/application.rb
      create  config/environment.rb
      create  config/environments
      create  config/environments/development.rb
      create  config/environments/production.rb
      create  config/environments/test.rb
      create  config/initializers
      create  config/initializers/backtrace_silencers.rb
      create  config/initializers/inflections.rb
      create  config/initializers/mime_types.rb
      create  config/initializers/secret_token.rb
      create  config/initializers/session_store.rb
      create  config/locales
      create  config/locales/en.yml
      create  config/boot.rb
      create  config/database.yml
      create  db
      create  db/seeds.rb
      create  doc
      create  doc/README_FOR_APP
      create  lib
      create  lib/tasks
      create  lib/tasks/.gitkeep
      create  log
      create  log/server.log
      create  log/production.log
      create  log/development.log
      create  log/test.log
      create  public
      create  public/404.html
      create  public/422.html
      create  public/500.html
      create  public/favicon.ico
      create  public/index.html
      create  public/robots.txt
      create  public/images
      create  public/images/rails.png
      create  public/stylesheets
      create  public/stylesheets/.gitkeep
      create  public/javascripts
      create  public/javascripts/prototype.js
      create  public/javascripts/rails.js
      create  public/javascripts/application.js
      create  script
      create  script/rails
      create  test
      create  test/fixtures
      create  test/functional
      create  test/integration
      create  test/performance/browsing_test.rb
      create  test/test_helper.rb
      create  test/unit
      create  tmp
      create  tmp/sessions
      create  tmp/sockets
      create  tmp/cache
      create  tmp/pids
      create  vendor/plugins
      create  vendor/plugins/.gitkeep
bundle install
Using rake (0.8.7) 
Using abstract (1.0.0) 
Using activesupport (3.1.0.beta) from source at /home/rubys/git/rails 
Using builder (3.0.0) 
Using i18n (0.5.0) 
Using activemodel (3.1.0.beta) from source at /home/rubys/git/rails 
Using erubis (2.6.6) 
Using rack (1.2.1) from source at /home/rubys/git/rack 
Using rack-cache (0.5.3) 
Using rack-mount (0.6.13) 
Using rack-test (0.5.6) 
Using tzinfo (0.3.23) 
Using actionpack (3.1.0.beta) from source at /home/rubys/git/rails 
Using mime-types (1.16) 
Using polyglot (0.3.1) 
Using treetop (1.4.9) 
Using mail (2.2.12) 
Using actionmailer (3.1.0.beta) from source at /home/rubys/git/rails 
Using arel (2.0.7.beta.20101201093009) from source at /home/rubys/git/arel 
Using activerecord (3.1.0.beta) from source at /home/rubys/git/rails 
Using activeresource (3.1.0.beta) from source at /home/rubys/git/rails 
Using bundler (1.0.7) 
Using thor (0.14.6) 
Using railties (3.1.0.beta) from source at /home/rubys/git/rails 
Using rails (3.1.0.beta) from source at /home/rubys/git/rails 
Using sqlite3-ruby (1.3.2) 
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
edit app/models/product.rb
class Product < ActiveResource::Base
  self.site = 'http://dave:secret@localhost:3000/'
end
echo "Product.find(2).title" | IRBRC=tmp/irbrc rails console
Loading development environment (Rails 3.1.0.beta)
>> Product.find(2).title
ActiveResource::ServerError: Failed.  Response code = 500.  Response message = Internal Server Error .
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:147:in `handle_response'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:114:in `request'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:79:in `get'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:217:in `with_auth'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:79:in `get'
	from /home/rubys/git/rails/activeresource/lib/active_resource/base.rb:906:in `find_single'
	from /home/rubys/git/rails/activeresource/lib/active_resource/base.rb:798:in `find'
	from (irb):1
>> 
edit app/controllers/line_items_controller.rb
  def create
    @cart = current_cart
    if params[:line_item]
      # ActiveResource
      params[:line_item][:order_id] = params[:order_id]
      @line_item = LineItem.new(params[:line_item])
    else
      # HTML forms
      product = Product.find(params[:product_id])
      @line_item = @cart.add_product(product.id)
    end
 
    respond_to do |format|
      if @line_item.save
        format.html { redirect_to(store_url) }
        format.js   { @current_item = @line_item }
        format.xml  { render :xml => @line_item,
          :status => :created, :location => @line_item }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @line_item.errors,
          :status => :unprocessable_entity }
      end
    end
  end
edit config/routes.rb
Depot::Application.routes.draw do
  get 'admin' => 'admin#index'
  controller :sessions do
    get  'login' => :new
    post 'login' => :create
    delete 'logout' => :destroy
  end
  scope '(:locale)' do
    resources :users
    resources :orders do
      resources :line_items
    end
 
    resources :line_items
    resources :carts
    resources :products do
      get :who_bought, :on => :member
    end
    root :to => 'store#index', :as => 'store'
  end
end
echo "Product.find(2).title" | IRBRC=tmp/irbrc rails console
Loading development environment (Rails 3.1.0.beta)
>> Product.find(2).title
ActiveResource::ServerError: Failed.  Response code = 500.  Response message = Internal Server Error .
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:147:in `handle_response'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:114:in `request'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:79:in `get'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:217:in `with_auth'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:79:in `get'
	from /home/rubys/git/rails/activeresource/lib/active_resource/base.rb:906:in `find_single'
	from /home/rubys/git/rails/activeresource/lib/active_resource/base.rb:798:in `find'
	from (irb):1
>> 
echo "p = Product.find(2)\\nputs p.price\\np.price-=5\\np.save" | IRBRC=tmp/irbrc rails console
Loading development environment (Rails 3.1.0.beta)
>> p = Product.find(2)
ActiveResource::ServerError: Failed.  Response code = 500.  Response message = Internal Server Error .
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:147:in `handle_response'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:114:in `request'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:79:in `get'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:217:in `with_auth'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:79:in `get'
	from /home/rubys/git/rails/activeresource/lib/active_resource/base.rb:906:in `find_single'
	from /home/rubys/git/rails/activeresource/lib/active_resource/base.rb:798:in `find'
	from (irb):1
>> puts p.price
NoMethodError: undefined method `price' for nil:NilClass
	from /home/rubys/git/rails/activesupport/lib/active_support/whiny_nil.rb:48:in `method_missing'
	from (irb):2
>> p.price-=5
NoMethodError: undefined method `price' for nil:NilClass
	from /home/rubys/git/rails/activesupport/lib/active_support/whiny_nil.rb:48:in `method_missing'
	from (irb):3
>> p.save
NoMethodError: You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.save
	from (irb):4
>> 
get /

ActiveRecord::StatementInvalid in StoreController#index

SQLite3::CorruptException: database disk image is malformed: SELECT "products".* FROM "products" ORDER BY title

Rails.root: /home/rubys/svn/rails4/Book/util/work-188/depot

Application Trace | Framework Trace | Full Trace
app/controllers/store_controller.rb:14:in `index'

Request

Parameters:

None

Show session dump

Show env dump

Response

Headers:

None

edit app/models/order.rb
class Order < ActiveResource::Base
  self.site = 'http://dave:secret@localhost:3000/'
end
echo "Order.find(1).name\\nOrder.find(1).line_items\\n" | IRBRC=tmp/irbrc rails console
Loading development environment (Rails 3.1.0.beta)
>> Order.find(1).name
ActiveResource::ServerError: Failed.  Response code = 500.  Response message = Internal Server Error .
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:147:in `handle_response'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:114:in `request'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:79:in `get'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:217:in `with_auth'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:79:in `get'
	from /home/rubys/git/rails/activeresource/lib/active_resource/base.rb:906:in `find_single'
	from /home/rubys/git/rails/activeresource/lib/active_resource/base.rb:798:in `find'
	from (irb):1
>> Order.find(1).line_items
ActiveResource::ServerError: Failed.  Response code = 500.  Response message = Internal Server Error .
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:147:in `handle_response'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:114:in `request'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:79:in `get'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:217:in `with_auth'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:79:in `get'
	from /home/rubys/git/rails/activeresource/lib/active_resource/base.rb:906:in `find_single'
	from /home/rubys/git/rails/activeresource/lib/active_resource/base.rb:798:in `find'
	from (irb):2
>> 
edit app/models/line_item.rb
class LineItem < ActiveResource::Base
  self.site = 'http://dave:secret@localhost:3000/orders/:order_id'
end
get /orders/1/line_items.xml

SQLite3::CorruptException in Line itemsController#index

database disk image is malformed

Rails.root: /home/rubys/svn/rails4/Book/util/work-188/depot

Application Trace | Framework Trace | Full Trace
app/models/user.rb:16:in `authenticate'
app/controllers/application_controller.rb:33:in `authorize'
app/controllers/application_controller.rb:32:in `authorize'

Request

Parameters:

{"format"=>"xml",
 "order_id"=>"1"}

Show session dump

Show env dump

Response

Headers:

None

echo "LineItem.find(:all, :params => {:order_id=>1})" | IRBRC=tmp/irbrc rails console
Loading development environment (Rails 3.1.0.beta)
>> LineItem.find(:all, :params => {:order_id=>1})
ActiveResource::ServerError: Failed.  Response code = 500.  Response message = Internal Server Error .
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:147:in `handle_response'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:114:in `request'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:79:in `get'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:217:in `with_auth'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:79:in `get'
	from /home/rubys/git/rails/activeresource/lib/active_resource/base.rb:882:in `find_every'
	from /home/rubys/git/rails/activeresource/lib/active_resource/base.rb:794:in `find'
	from (irb):1
>> 
echo "li = LineItem.find(:all, :params => {:order_id=>1}).first\\nputs li.price\\nli.price*=0.8\\nli.save" | IRBRC=tmp/irbrc rails console
Loading development environment (Rails 3.1.0.beta)
>> li = LineItem.find(:all, :params => {:order_id=>1}).first
ActiveResource::ServerError: Failed.  Response code = 500.  Response message = Internal Server Error .
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:147:in `handle_response'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:114:in `request'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:79:in `get'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:217:in `with_auth'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:79:in `get'
	from /home/rubys/git/rails/activeresource/lib/active_resource/base.rb:882:in `find_every'
	from /home/rubys/git/rails/activeresource/lib/active_resource/base.rb:794:in `find'
	from (irb):1
>> puts li.price
NoMethodError: undefined method `price' for nil:NilClass
	from /home/rubys/git/rails/activesupport/lib/active_support/whiny_nil.rb:48:in `method_missing'
	from (irb):2
>> li.price*=0.8
NoMethodError: undefined method `price' for nil:NilClass
	from /home/rubys/git/rails/activesupport/lib/active_support/whiny_nil.rb:48:in `method_missing'
	from (irb):3
>> li.save
NoMethodError: You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.save
	from (irb):4
>> 
echo "li2 = LineItem.new(:order_id=>1, :product_id=>2, :quantity=>1, :price=>0.0)\\nli2.save" | IRBRC=tmp/irbrc rails console
Loading development environment (Rails 3.1.0.beta)
>> li2 = LineItem.new(:order_id=>1, :product_id=>2, :quantity=>1, :price=>0.0)
=> #<LineItem:0x7fd743d94848 @persisted=false, @attributes={"price"=>0.0, "quantity"=>1, "product_id"=>2}, @prefix_options={:order_id=>1}>
>> li2.save
ActiveResource::ServerError: Failed.  Response code = 500.  Response message = Internal Server Error .
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:147:in `handle_response'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:114:in `request'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:97:in `post'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:217:in `with_auth'
	from /home/rubys/git/rails/activeresource/lib/active_resource/connection.rb:97:in `post'
	from /home/rubys/git/rails/activeresource/lib/active_resource/base.rb:1333:in `create_without_notifications'
	from /home/rubys/git/rails/activeresource/lib/active_resource/observing.rb:11:in `create'
	from /home/rubys/git/rails/activeresource/lib/active_resource/base.rb:1136:in `save_without_validation'
	from /home/rubys/git/rails/activeresource/lib/active_resource/validations.rb:79:in `save_without_notifications'
	from /home/rubys/git/rails/activeresource/lib/active_resource/observing.rb:11:in `save'
	from (irb):2
>> 
pub /depot_client

25.1 rack 21.2 Form Helpers