まったりRails(その3)

「まったりRails」は全て以下の書籍「Railsによるアジャイルアプリケーション開発」に沿っていろいろと試している。従って文章中の「書籍」「チュートリアル」等は断りが無ければ全てこの書籍の内容を指していると思って欲しい。(ちなみにこの書籍で扱っているRailsのバージョンは1.2.x。私がインストールしているRailsは2.0.2だ。これが後々嵌る伏線になっている)
RailsによるアジャイルWebアプリケーション開発 第2版
RailsによるアジャイルWebアプリケーション開発 第2版

前回ではsqliteのインストールも済んだので、そろそろActiveRecordによるデータベースとの連携を試してみよう。

  • 実行したコマンド
ruby script/generate model product
      exists  app/models/
      exists  test/unit/
      exists  test/fixtures/
      create  app/models/product.rb
      create  test/unit/product_test.rb
      create  test/fixtures/products.yml
      create  db/migrate
      create  db/migrate/001_create_products.rb

これでモデル"product"のプレースホルダが出来たので、001_create_products.rbを開く

  • 001_create_products.rb
class CreateProducts < ActiveRecord::Migration
  def self.up
    create_table :products do |t|
      t.timestamps
    end
  end

  def self.down
    drop_table :products
  end
end

timestampsメソッドは最初から追加されていた。これは書籍のチュートリアルでは触れられていなかったが、Rails1.2系と2.0系の違いなのか?

Rails1.2系を使ったことが無い私は細かいことを気にしても仕方が無いので、カラムの定義を追加。

class CreateProducts < ActiveRecord::Migration
  def self.up
    create_table :products do |t|
      t.column :title, :string
      t.column :description, :text
      t.column :image_url, :string
      t.timestamps
    end
  end

  def self.down
    drop_table :products
  end
end

create_tableメソッドに渡るブロックのパラメタt(Tableクラス?)のcolumnメソッドは、第一パラメタ、第二パラメタ共にシンボルで渡すのが決まりのようだが、これは

t.column(カラム識別シンボル, カラムの型シンボル)

という意味なのだろうか。わからんので、後でリファレンスを調べてみよう。

ここまで書いたら、rakeでデータベースにモデルを反映する。

  • 実行したコマンド
rake db:migrate
(in E:/www/sample)
== 1 CreateProducts: migrating ================================================
-- create_table(:products)
   -> 0.0940s
== 1 CreateProducts: migrated (0.0980s) =======================================

これでconfig/database.yamlに定義されているデータベースにテーブルが追加されているはず。

development:
  adapter: sqlite3
  database: db/development.sqlite3
  timeout: 5000

以下はsqliteccというツールで、同データベースを開いてみた所だ。

モデル"product"の複数形でテーブル"products"が生成されていることが判るが、定義した覚えの無いカラムが3つ追加されているようだ。
idはモデルのインスタンスを識別するために使用するユニーク識別子だろう。created_atとupdated_atは、001_create_products.rbに追加されていたtimestampsメソッドの結果だろうか。


予告編

さて、次回はのモデル(テーブル)のデータを管理するアプリケーションを作ることにしよう。scaffoldを実行してみることになるが、ここで嵌ることになるとは....