Agile Web Development with Rails, Edition 5
6.3 Playtime
6.1 Iteration A1: Creating the Products Maintenance Application
6.2 Iteration A2: Making Prettier Listings
Show the relationship between various artifacts: seed data, stylesheets, html, and images.
Copy some images
cp -vp /home/rubys/git/awdwr/edition4/data/assets/* app/assets/images/
‘/home/rubys/git/awdwr/edition4/data/assets/7apps.jpg’ -> ‘app/assets/images/7apps.jpg’
‘/home/rubys/git/awdwr/edition4/data/assets/adrpo.jpg’ -> ‘app/assets/images/adrpo.jpg’
‘/home/rubys/git/awdwr/edition4/data/assets/dcbang.jpg’ -> ‘app/assets/images/dcbang.jpg’
‘/home/rubys/git/awdwr/edition4/data/assets/logo.svg’ -> ‘app/assets/images/logo.svg’
‘/home/rubys/git/awdwr/edition4/data/assets/lorem.jpg’ -> ‘app/assets/images/lorem.jpg’
‘/home/rubys/git/awdwr/edition4/data/assets/rails.png’ -> ‘app/assets/images/rails.png’
‘/home/rubys/git/awdwr/edition4/data/assets/ruby.jpg’ -> ‘app/assets/images/ruby.jpg’
Add some style
edit app/assets/stylesheets/products.scss
// Place all the styles related to the Products controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/
.products {
margin: 0;
padding: 0.5em;
a {
padding: 0.354em 0.5em;
border-radius: 0.354em;
}
table {
border-collapse: collapse;
}
td {
padding: 0.5em;
margin: 0;
}
tr.list_line_odd {
background-color: #effeef;
}
td.image {
// Hide this on mobile devices
display: none;
// Assume anything bigger than 30em
// is a non-mobile device and can
// fit the image.
@media (min-width: 30em) {
display: block;
img {
height: 11.3em;
}
}
}
td.description {
h1 {
font-size: 1.4em;
}
}
td.actions {
ul {
padding: 0;
list-style: none;
li {
padding: 0.5em 0.5em;
}
}
}
tfoot {
td {
padding: 0.5em 0;
}
}
}
Load some "seed" data
edit db/seeds.rb
Product.delete_all
# . . .
Product.create!(title: 'Seven Mobile Apps in Seven Weeks',
description:
%{<p>
<em>Native Apps, Multiple Platforms</em>
Answer the question “Can we build this for ALL the devices?” with a
resounding YES. This book will help you get there with a real-world
introduction to seven platforms, whether you’re new to mobile or an
experienced developer needing to expand your options. Plus, you’ll find
out which cross-platform solution makes the most sense for your needs.
</p>},
image_url: '7apps.jpg',
price: 26.00)
# . . .
rails db:seed
Link to the stylesheet in the layout
edit app/views/layouts/application.html.erb
<!DOCTYPE html>
<html>
<head>
<title>Depot</title>
<%= csrf_meta_tags %>
<%= stylesheet_link_tag 'application', media: 'all',
'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
</head>
<body>
<main class='<%= controller.controller_name %>'>
<%= yield %>
</main>
</body>
</html>
Replace the scaffold generated view with some custom HTML
edit app/views/products/index.html.erb
<% if notice %>
<aside id="notice"><%= notice %></aside>
<% end %>
<h1>Products</h1>
<table>
<tfoot>
<tr>
<td colspan="3">
<%= link_to 'New product', new_product_path %>
</td>
</tr>
</tfoot>
<tbody>
<% @products.each do |product| %>
<tr class="<%= cycle('list_line_odd', 'list_line_even') %>">
<td class="image">
<%= image_tag(product.image_url, class: 'list_image') %>
</td>
<td class="description">
<h1><%= product.title %></h1>
<p>
<%= truncate(strip_tags(product.description),
length: 80) %>
</p>
</td>
<td class="actions">
<ul>
<li><%= link_to 'Show', product %></li>
<li><%= link_to 'Edit', edit_product_path(product) %></li>
<li>
<%= link_to 'Destroy',
product,
method: :delete,
data: { confirm: 'Are you sure?' } %>
</li>
</ul>
</td>
</tr>
<% end %>
</tbody>
</table>
See the finished result
get /products
Products
New product
|
|
Rails, Angular, Postgres, and Bootstrap
Powerful, Effective, and Efficient Full-Stack Web Development
As...
|
|
|
Seven Mobile Apps in Seven Weeks
Native Apps, Multiple Platforms
Answer the question “Can we buil...
|
|
|
Ruby Performance Optimization
Why Ruby Is Slow, and How to Fix It
You don’t have to accept sl...
|
|
6.3 Playtime
6.1 Iteration A1: Creating the Products Maintenance Application