RoR の script/generate scaffold で何が作られたのか気になってきた。そこで、チュートリアルを真似てさっき作ったばかりのユーザ管理のデモプログラムの中身を見てみることにした。ユーザ管理アプリケーション作った手順を再掲すると次のようになる。
$ rails demo $ cd demo $ ruby script/generate scaffold user name:string password:string email:string is_admin:boolean $ rake db:migrate $ ruby script/server そこで、scaffold でどんなデータベースができたのか覗いてみた。db ディレクトリのリストをとると次のようになった。 ~/rails/demo$ ls db development.sqlite3 migrate schema.rb まず、schema.rb を見た。 ~/rails/demo$ ls db/schema.rb コメントを省略すると、中身は次のようなコードだった。。 ActiveRecord::Schema.define(:version => 20081013000959) do create_table "users", :force => true do |t| t.string "name" t.string "password" t.string "email" t.boolean "is_admin" t.datetime "created_at" t.datetime "updated_at" end end ActiveRecord::Schema.define というメソッドに、do ~ end ではさまれたブロックが渡されている。そのブロックの中では、create_table というメソッドに、"users" というテーブル名を第1引数に、:force というフラグを true にして、テーブル定義のメソッドが並んだブロックが渡されている。よくは分からないが、データベースのスキーマを定義するときに使われるのだろう。同時に、モデルの定義も行われているのかもしれない。 migrate はディレクトリだ。中には、ファイルが1個だけ入っていた。 ~/rails/demo$ ls db/migrate20081013000959_create_users.rb .._create_users.rb には、次のようなコードが書いてあった。 class CreateUsers < ActiveRecord::Migration def self.up create_table :users do |t| t.string :name t.string :password t.string :email t.boolean :is_admin t.timestamps end end def self.down drop_table :users end end これはお馴染みのコントローラのアクションの定義だ。CreateUsers コントローラに up と down の二つのメソッドが定義されている。up でテーブルの定義を行い、down でテーブルの廃棄を行う。 development.sqlite3 はたぶん sqlite3 のデータベースだろう。試してみよう。 ~/console/rails/demo$ sqlite3 db/development.sqlite3 SQLite version 3.4.2 Enter ".help" for instructions sqlite> .tables schema_migrations users sqlite> .schema CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL); CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "password" varchar(255), "email" varchar(255), "is_admin" boolean, "created_at" datetime, "updated_at" datetime); CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version"); sqlite> .quit やっぱりそうだった。先にSQlite3について少し調べておいて良かった。結局 db ディレクトリにはデータベース定義を実行するコードとデータベース本体が置かれていた。 データベースを migrate するときに、rake db:migrate するので、Rakefile の中身も覗いてみた。 ~/rails/demo$ less Rakefile # Add your own tasks in files placed in lib/tasks ending in .rake, # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. require(File.join(File.dirname(__FILE__), 'config', 'boot')) require 'rake' require 'rake/testtask' require 'rake/rdoctask' require 'tasks/rails' なにをやっているのかさっぱり分からなかった。
by tnomura9
| 2008-10-13 15:45
| Ruby
|
Comments(0)
|
カテゴリ
新型コロナウイルス 主インデックス Haskell 記事リスト 圏論記事リスト 考えるということのリスト 考えるということ ラッセルのパラドックス Haskell Prelude Ocaml ボーカロイド 圏論 jQuery デモ HTML Python ツールボックス XAMPP Ruby ubuntu WordPress 脳の話 話のネタ リンク 幸福論 キリスト教 心の話 メモ 電子カルテ Dojo JavaScript C# NetWalker ed と sed HTML Raspberry Pi C 言語 命題論理 以前の記事
最新のトラックバック
最新のコメント
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||