ActiveRecord - Less painful object-relational mapping

先日紹介したRailsでも採用されていたRuby用のO/Rマッピングツール、ActiveRecordを使ってみました(Railsの作者さんからTrackBackされてるし…)。まだ詳細なドキュメントがほとんど無い状態ですが、シンプルでいいです。XMLによるマッピング定義が不要というのが嬉しい。

まずはテーブルの作成と初期データの挿入。

-- 都道府県テーブル
create table prefectures (
  id serial not null,
  name text not null,
  primary key (id)
);
insert into prefectures(id, name) values (13, "東京都");

-- 市区町村テーブル
create table cities (
  id serial not null,
  name text not null,
  prefectureid integer not null references prefectures (id),
  primary key (id)
);
insert into cities(id, name, prefectureid) values (1, "板橋区", 13);

テーブル名が複数形なのは、Railsがクラス名を複数形にした文字列をデフォルトのテーブル名として利用するためです。任意のテーブル名とマッピングすることもできるはずなんですが上手く行かない…。

で、テーブルに対応するクラスは以下のようになります。

#
# prefecture.rb
#
require 'active_record'

class Prefecture  'Prefecture', :foreign_key => 'prefectureid'
end

XMLを利用せずにマッピング定義もソースコードに含める形になります。has_oneの他にもhas_manyやbelong_toといったメソッドが用意されていますが、果たしてこれでどの程度複雑なマッピングまでカバーできるのか多少気になる所ではあります。

メインとなるスクリプトは以下のようになります。ActiveRecordはDBIおよびMySQL/Ruby(Ruby/MySQL)による接続に対応しています。

#!/usr/bin/env ruby

require 'active_record'
require 'prefecture'
require 'city'

uri = 'DBI:Pg:test:localhost'
username = 'juno'
pass = ''

ActiveRecord::Base.establish_dbi_connection(uri, username, pass)

itabashi = City.find(1)
puts itabashi.prefecture.name + itabashi.name  # => 東京都板橋区

使用可能なタグ <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>