2010/6/21(二) kaedeアプリケーション

来源:互联网 发布:杨梅网络 编辑:程序博客网 时间:2024/05/19 19:42

MVC
モデル - Model
    データベースを操作するためのクラスです。   
ビュー - View
    画面への表示・出力などの処理を行うものです。
コントローラ - Controller
    ビューが必要とするデータを揃え、ビューを選択するところまでです。

データベースを作成する
>rake db:create
データベースを削除する
>rake db:drop

テーブルとモデルの命名規約
原則として、データベースのテーブルごとにモデルを1つずつ作成します。
Railsの規約では、テーブルの名前はbooksのような英単語の複数形とします。
他方、このテーブルに対応するモデルクラスの名前はBookです。先頭の文字を大文字に変えた上で、単数形にします。

-------------------------------------
Step 1 アプリケーション新規
-------------------------------------
>rails kaede -d postgresql
>cd kaede
/config/database.ymlを修正
>rake db:create
>ruby script/generate model Book title:string author:string published_on:date
      exists  app/models/
      exists  test/unit/
      exists  test/fixtures/
      create  app/models/book.rb
      create  test/unit/book_test.rb
      create  test/fixtures/books.yml
      create  db/migrate
      create  db/migrate/20100621051739_create_books.rb
>rake db:migrate

説明:
ruby script/generateで指定する型は、データベース管理システム固有のデータ型ではなく、Railsが定める汎用のデータ型です。
データベーステーブルの3つのカラムid、createed_at、updated_atは特別な存在です。あえて指定しなくてもgenerateスクリプトが暗黙のうちに生成します。

db/migrate/20100621051739_create_books.rbがマイグレーションスクリプトです。
その中身は次の通りです。
class CreateBooks < ActiveRecord::Migration
...(省略)
end
データベースにテーブルを作成したり、削除したり、定義を変更したりすることをRailsではマイグレーションと呼びます。
マイグレーションを実行するコマンド:
>rake db:migrate
※schema_migrationsテーブルは、マイグレーションスクリプトの実行を制御するための特別なテーブルで、Railsにより自動的に作成されます。

-------------------------------------
Step 2 コントローラとビューの生成
-------------------------------------
>ruby script/generate controller Books index show
      exists  app/controllers/
      exists  app/helpers/
      create  app/views/books
      exists  test/functional/
      create  test/unit/helpers/
      create  app/controllers/books_controller.rb
      create  test/functional/books_controller_test.rb
      create  app/helpers/books_helper.rb
      create  test/unit/helpers/books_helper_test.rb
      create  app/views/books/index.html.erb
      create  app/views/books/show.html.erb
booksコントローラを作成し、booksテーブルの表題の一覧を表示するアクションindexと、特定のレコードの中身を表示するアクションshowを定義します。
先ほどのコマンドの結果、appが以下のようになっています。
    -controllers
        -books_controller.rb
    -helpers
        -books_helper.rb
    -models
        -book.rb
    -views
        -books
            -index.html.erb
            -show.html.erb

説明
.html.erbについて
erbはRubyインタープリタの標準ライブラリで、ASPやJSPのようにマークアップを使って埋め込まれたRubyコード解釈して、動的にドキュメントを生成します。

-------------------------------------
Step 3 スキャフォルド Scaffold
-------------------------------------
Ruby On Railsで、スキャフォルドとは特定のデータベーステーブルを操作するために生成されたモデル、コントロール、ビューのセットを指します。
Scaffoldは生成された瞬間から、一種のアプリケーションとして動作します。

① >rails keyaki -d postgresql
② >cd keyaki
config/database.ymlを編集(なぜ毎回自分でusernameとpasswordを編集しなければなりませんか???)
③ >rake db:create
(db:createとdb:create allの違いにやっと気が付きました。)
④ >ruby script/generate scaffold Card name:string address:string birthday:date
このコマンドの結果、いろんなファイルが生成されました。
⑤ >rake db:migrate
⑥ >ruby script/server
マイグレーションを実行し、アプリケーションを起動します。
http://localhost:3000/cards/にアクセスして、新しいレコードを追加してみます。


-------------------------------------
Step 4 スキャフォルドの修正
-------------------------------------
新規入力フォームや更新フォームに生年月日の「年」の選択肢として、現在の前後5年分か表示されないので、これを修正します。
/app/views/cards/new.html.erbに<%= f.date_select :birthday %>という記述がありますから、
date_selectというメソッドを調べましょう。
「http://api.rubyonrails.org/」でRuby on RailsのAPIドキュメントでdate_selectメソッドの説明をすぐ見つかりました。
・:start_year - Set the start year for the year select. Default is Time.now.year - 5.
・:end_year - Set the end year for the year select. Default is Time.now.year + 5.
というオプションの説明があります。
じゃ、これを読むと、new.html.erbを次にように修正します。
<%= f.date_select :birthday, :start_year=>1900 %>
そして、edit.html.erbも同じように修正します。
こうすると、Birthdayの年の選択肢に1900から選択できるようになりました。

説明:
何か分からないことがあったらAPIドキュメントを参照する癖をつけるはとてもよいことです。
Ruby on Rails http://api.rubyonrails.org/
Rubyコア http://ruby-doc.org/core-1.8.7/index.html
Ruby標準ライブラリ http://ruby-doc.org/stdlib/

現在の年を取得したければ、yearメソッドを探すことで分かります。