Agile Web Development with Rails, Edition 4

Agile Web Development with Rails, Edition 4

6.1 Iteration A1: Creating the Products Maintenance Application Table of Contents

2 Instant Gratification

We start with a simple "hello world!" demo application and in the process verify that everything is installed correctly.

Create the application

bundle exec /home/rubys/git/rails/bin/rails new demo1 --skip-bundle --dev
      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/application.js
      create  public/javascripts/controls.js
      create  public/javascripts/dragdrop.js
      create  public/javascripts/effects.js
      create  public/javascripts/prototype.js
      create  public/javascripts/rails.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.9.2.2) 
Using abstract (1.0.0) 
Using activesupport (3.0.15) 
Using builder (2.1.2) 
Using i18n (0.5.0) 
Using activemodel (3.0.15) 
Using erubis (2.6.6) 
Using rack (1.2.5) 
Using rack-mount (0.6.14) 
Using rack-test (0.5.7) 
Using tzinfo (0.3.33) 
Using actionpack (3.0.15) 
Using mime-types (1.19) 
Using polyglot (0.3.3) 
Using treetop (1.4.10) 
Using mail (2.2.19) 
Using actionmailer (3.0.15) 
Using arel (2.0.10) 
Using activerecord (3.0.15) 
Using activeresource (3.0.15) 
Using bundler (1.1.3) 
Using json (1.7.3) 
Using rdoc (3.12) 
Using thor (0.14.6) 
Using railties (3.0.15) 
Using rails (3.0.15) 
Using sqlite3 (1.3.6) 
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.

See what files were created

ls -p
app/	 config.ru  doc/     Gemfile.lock  log/     Rakefile  script/  tmp/
config/  db/	    Gemfile  lib/	   public/  README    test/    vendor/

Create a simple controller

rails generate controller Say hello goodbye
      create  app/controllers/say_controller.rb
       route  get "say/goodbye"
       route  get "say/hello"
      invoke  erb
      create    app/views/say
      create    app/views/say/hello.html.erb
      create    app/views/say/goodbye.html.erb
      invoke  test_unit
      create    test/functional/say_controller_test.rb
      invoke  helper
      create    app/helpers/say_helper.rb
      invoke    test_unit
      create      test/unit/helpers/say_helper_test.rb
edit app/controllers/say_controller.rb
class SayController < ApplicationController
  def hello
  end
 
  def goodbye
  end
 
end

Start the server.

Attempt to fetch the file - note that it is missing

get /say/hello

Say#hello

Find me in app/views/say/hello.html.erb

Replace file with a simple hello world

edit app/views/say/hello.html.erb
<h1>Hello from Rails!</h1>

This time it works!

get /say/hello

Hello from Rails!

Add a simple expression

edit app/views/say/hello.html.erb
<h1>Hello from Rails!</h1>
<p>
  It is now <%= Time.now %>
</p>
get /say/hello

Hello from Rails!

It is now Fri Jun 29 12:29:09 -0400 2012

Evaluate the expression in the controller.

edit app/controllers/say_controller.rb
class SayController < ApplicationController
  def hello
    @time = Time.now
  end
 
  def goodbye
  end
 
end

Reference the result in the view.

edit app/views/say/hello.html.erb
<h1>Hello from Rails!</h1>
<p>
  It is now <%= @time %>
</p>
get /say/hello

Hello from Rails!

It is now Fri Jun 29 12:29:10 -0400 2012

Replace the goodbye template

edit app/views/say/goodbye.html.erb
<h1>Goodbye!</h1>
<p>
  It was nice having you here.
</p>
get /say/goodbye

Goodbye!

It was nice having you here.

Add a link from the hello page to the goodbye page

edit app/views/say/hello.html.erb
<h1>Hello from Rails!</h1>
<p>
  It is now <%= @time %>
</p>
<p>
  Time to say
  <%= link_to "Goodbye", say_goodbye_path %>!
</p>
get /say/hello

Hello from Rails!

It is now Fri Jun 29 12:29:12 -0400 2012

Time to say Goodbye!

Add a link back to the hello page

edit app/views/say/goodbye.html.erb
<h1>Goodbye!</h1>
<p>
  It was nice having you here.
</p>
<p>
  Say <%= link_to "Hello", say_hello_path %> again.
</p>
get /say/goodbye

Goodbye!

It was nice having you here.

Say Hello again.

6.1 Iteration A1: Creating the Products Maintenance Application Table of Contents