書籍「Railsによるアジャイル Webアプリケーション開発」6章
5章は仕様のお話だったので飛ばす。
6.1 タスクA:アプリケーションの作成
1. Rails アプリケーションの作成
depot> rails new depot
2.データベースの作成
SQLL Lite3を使う。
→ユーザーアカウントの作成、パスワードも必要なしのため。
オススメらしい。
3.scaffoldの生成
DBテーブル作成、モデル、ビュー、コントローラーの作成を
一気に行うscaffold(足場)のコマンドを実行する
DB設定ファイル: config/database.yml内のdevelopementエントリ
DB作成場所:dbディレクトリ(SQLite3)
cd depot
rails generate scaffold Product title:string description:text image_url:string price:decimal
rails generate scafold テーブル名(単数形) 項目名:型 ・・・・
→細かい、桁数など、デフォルト値の設定はどうやるんだろう。
4.マイグレーションの適応
・マイグレーションとは?
DBへの変更内容をDBの種類には依存しない表現で記述したもの
適用すれば、DB定義の変更が可能。
テーブル作成ファイルを修正した場合は以下のコマンドで変更適用
depot> rake db:migrate
適応されていない変更タスクを全て探し出し、DBへ適応してくれる。
5.商品リストの表示
depot> rails server
ブラウザで以下を入力すると商品リスト表示画面を開く事ができる。
http://localhost:3000/products
6.2 イテレーションA2: もっと美しく
殺風景な商品リスト画面のレイアウト変更を行う。以下を追加
・CSSを使ってカラフルなレイアウトへ変更
・商品画像表示
1. seed.rbを使ったDBへのデータインポート
画面から入力が可能となったが面倒。
そこで、insert文を実行する要領でデータをインポートする機能を使う。
/depot/db/seed.rb
Product.create(title: 'Ruby', description: %{about ruby}, image_url: 'ruby.jpg', price: 49.95)
productモデルのcreate()メソッドを使い、データ投入。
SQLを使わずにデータ投入できるとか、凄いです。すべてrubyで完結するんですね。
テストデータを流し込むコマンド
depot> rake db:seed
2.CSSスタイルを商品リスト画面へ適用する
scaffoldによって自動作成されたprodutct.css.scsssへCSSを実装する。
/depot/app/assets/stylesheets/product.css.scss
.products { table { border-collapse: collapse; } ・・・ }
入れ子になっているのは Sassy CSSを用いて記述しているため。
階層を設ける事で冗長な記述を避け、わかりやすく書く事ができる。
そして、大枠の「.products」がテーブル名となっているのがポイント
このCSSを適用してみる。
HTMLにはheadセクションがない。
アプリケーション全体の標準的なページ環境を作成するためのHTMLが別となっているため。
depot/app/veiws/layouts/application.html.erb
<!DOCTYPE html> <html> <head> ・・・ </head> <body class='<%= controller.controller_name %>'> <%= yield %> </body> </html>
以下の記述において
<body class='<%= controller.controller_name %>'>
各TBLのCSSを適用する。
products_controller.rbの場合、controller.controller_name => products
となるため適用できる。
3.商品リストページの編集
<table> <% @products.each do |product| %> # railsヘルパーメソッドのcycle:引数内の文字列をループ内で交互に返す <tr class="<%= cycle('list_line_odd', 'list_line_even') %>"> <td> #image_tagはimageタグへ画像配置場所のurlとclassを紐づける <%= image_tag(product.image_url, class:'list_image') %> </td> <td class="list_description"> <dl> <dt><%= product.title %></dt> #railsヘルパーメソッドのtruncate:第一引数の文字列を80文字に切り捨てる <dd><%= truncate(strip_tags(product.description), length: 80) %></dd> </dl> </td> <td class="list_actions"> <%= link_to 'Show', product %><br/> <%= link_to 'Edit', edit_product_path(product) %><br/> #railsヘルパーメソッドのlink_to:Destroyというリンク名。HTTPのdeleteを実行 <%= link_to 'Destroy', product, method: :delete, data: { confirm: 'Are you sure?' } %> </td> </tr> <% end %> </table>
HTMLの表示もruby(railsヘルパーメソッド)を用いることで完結に記述している。
すべてrubyで完結させようという思想なのかな。
depot> rake db:rollback
seed.rbを実行した際のデータが消えます。
以下のコマンドを実行することでデータ再作成を行える。
#テーブル作成 depot> rake db:migrate #データ投入 depot> rake db:seed
6章完了。