#1986@freenodeで、ActiveRecordをRailsの中でじゃなくて単体で使えるか、って聞かれたんだけど、まぁ確かに使えるけどついでにいろんな余計なものが付いてきて、Stringみたいなコアなクラス書き換えたりするから微妙なんだよなー、と思い出してDataMapperを勧めてみた。ARはとっつき易いしRailsで使う分にはいいんだけど、単体で使うには上記の理由もあってあんまり好きじゃない。
でも微妙に変わってんだよね
DataMapperを単体で使う方法については過去の記事で書いたんだけど、半年以上たってるもんでその間にDataMapperも大分バージョンアップして。ということで、同じ挙動をするものを動くように書き直してみた。
require 'dm-core' DataMapper.setup(:default, { :adapter => 'sqlite3', :database => 'dm_test' }) DataMapper.setup(:second_database, { :adapter => 'sqlite3', :database => 'dm_test2' }) class Rabbit include DataMapper::Resource property :id, Integer, :serial => true property :name, String, :key => true property :color, String # p で出力したときに見にくかったから変えてるだけ def inspect "<#{self.class}:#{self.id}, #{self.name}, #{self.color}>" end end Rabbit.auto_migrate! rabbit = Rabbit.new rabbit.name = 'Jitterbug' rabbit.color = 'orange' rabbit.save Rabbit.create(:name => 'Mokha', :color => 'chestnut') puts "default database" p Rabbit.all p Rabbit.first(:name => 'Mokha') puts "-----" DataMapper.repository(:second_database) do Rabbit.auto_migrate! Rabbit.create(:name => 'Tango', :color => 'white') puts "secnond database" p Rabbit.all end
変わったところは以下の通り。
- Modelを作るのに前のコードではクラスを継承していたが、今はモジュールをインクルードするようになっている
- DataMapper.database(:repos_name)ではなくDataMapper.repository(:repos_name)になった
くらいか。もっと詳しく知りたい場合はDataMapperのドキュメント読んでね。まぁやっぱり日本語の情報少ないのは泣きどころ。Merbも1.0がリリースされたことだし、DataMapperも増えてくるかな。
補足・参考
上の例ではsqlite3を使ってるけど、その場合はdo_sqlite3をインストールする必要がある。あったはず。もちろんMySQLとかでやりたければdo_mysqlとかをインストールしてください。
あとこれは既知の問題なんだけど、関連モジュールのaddressableが2.0.0だと2008/11/19現在のgem最新版のDataMapper(0.9.6)が動かないので、addressableをダウングレードするかDataMapperの開発版をgithubから取ってきて下さい。