Agile Web Development with Rails, Edition 4
8.2 Iteration C2: Add a Page Layout
7.3 Playtime
8.1 Iteration C1: Create the Catalog Listing
RuntimeError: Edit config/routes.rb failed at makedepot.rb:498
Traceback:
Show the model, view, and controller working together.
Create a second controller with a single index action
rails generate controller Store index
create app/controllers/store_controller.rb
route get 'store/index'
invoke erb
create app/views/store
create app/views/store/index.html.erb
invoke test_unit
create test/controllers/store_controller_test.rb
invoke helper
create app/helpers/store_helper.rb
invoke test_unit
invoke assets
invoke coffee
create app/assets/javascripts/store.coffee
invoke scss
create app/assets/stylesheets/store.scss
Route the 'root' of the site to the store
edit config/routes.rb
#<IndexError: regexp not matched>
/home/rubys/git/gorp/lib/gorp/edit.rb:150:in `[]='
/home/rubys/git/gorp/lib/gorp/edit.rb:150:in `msub'
makedepot.rb:498:in `block (2 levels) in <main>'
/home/rubys/git/gorp/lib/gorp/edit.rb:173:in `instance_exec'
/home/rubys/git/gorp/lib/gorp/edit.rb:173:in `edit'
makedepot.rb:496:in `block in <main>'
/home/rubys/git/gorp/lib/gorp/output.rb:59:in `block (4 levels) in <top (required)>'
/home/rubys/git/gorp/lib/gorp/output.rb:49:in `each'
/home/rubys/git/gorp/lib/gorp/output.rb:49:in `block (3 levels) in <top (required)>'
/home/rubys/.rvm/gems/ruby-2.3.0/gems/builder-3.2.2/lib/builder/xmlbase.rb:175:in `_nested_structures'
/home/rubys/.rvm/gems/ruby-2.3.0/gems/builder-3.2.2/lib/builder/xmlbase.rb:68:in `tag!'
/home/rubys/.rvm/gems/ruby-2.3.0/gems/builder-3.2.2/lib/builder/xmlbase.rb:93:in `method_missing'
/home/rubys/git/gorp/lib/gorp/output.rb:22:in `block (2 levels) in <top (required)>'
/home/rubys/.rvm/gems/ruby-2.3.0/gems/builder-3.2.2/lib/builder/xmlbase.rb:175:in `_nested_structures'
/home/rubys/.rvm/gems/ruby-2.3.0/gems/builder-3.2.2/lib/builder/xmlbase.rb:68:in `tag!'
/home/rubys/.rvm/gems/ruby-2.3.0/gems/builder-3.2.2/lib/builder/xmlbase.rb:93:in `method_missing'
/home/rubys/git/gorp/lib/gorp/output.rb:11:in `block in <top (required)>'
Rails.application.routes.draw do
get 'store/index'
resources :products
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
# Serve websocket cable requests in-process
# mount ActionCable.server => '/cable'
end
Demonstrate that everything is wired together
get /
Getting started
Here’s how to get rolling:
-
Use bin/rails generate
to create your models and controllers
To see all available options, run it without parameters.
-
Set up a root route to replace this page
You're seeing this page because you're running in development mode and you haven't set a root route yet.
Routes are set up in config/routes.rb.
-
Configure your database
If you're not using SQLite (the default), edit config/database.yml with your username and password.
In the controller, get a list of products from the model
edit app/controllers/store_controller.rb
class StoreController < ApplicationController
def index
@products = Product.order(:title)
end
end
In the view, display a list of products
edit app/views/store/index.html.erb
<% if notice %>
<p id="notice"><%= notice %></p>
<% end %>
<h1>Your Pragmatic Catalog</h1>
<% @products.each do |product| %>
<div class="entry">
<%= image_tag(product.image_url) %>
<h3><%= product.title %></h3>
<%= sanitize(product.description) %>
<div class="price_line">
<span class="price"><%= product.price %></span>
</div>
</div>
<% end %>
Add some basic style
edit app/assets/stylesheets/store.css.scss
.store {
h1 {
margin: 0;
padding-bottom: 0.5em;
font: 150% sans-serif;
color: #226;
border-bottom: 3px dotted #77d;
}
/* An entry in the store catalog */
.entry {
overflow: auto;
margin-top: 1em;
border-bottom: 1px dotted #77d;
min-height: 100px;
img {
width: 80px;
margin-right: 5px;
margin-bottom: 5px;
position: absolute;
}
h3 {
font-size: 120%;
font-family: sans-serif;
margin-left: 100px;
margin-top: 0;
margin-bottom: 2px;
color: #227;
}
p, div.price_line {
margin-left: 100px;
margin-top: 0.5em;
margin-bottom: 0.8em;
}
.price {
color: #44a;
font-weight: bold;
margin-right: 3em;
}
}
}
Show our first (ugly) catalog page
get /
Getting started
Here’s how to get rolling:
-
Use bin/rails generate
to create your models and controllers
To see all available options, run it without parameters.
-
Set up a root route to replace this page
You're seeing this page because you're running in development mode and you haven't set a root route yet.
Routes are set up in config/routes.rb.
-
Configure your database
If you're not using SQLite (the default), edit config/database.yml with your username and password.
8.2 Iteration C2: Add a Page Layout
7.3 Playtime