#june29jp

PassiveRecord,ハッシュをActiveRecordのインタフェースで使う

2008-06-30

PassiveRecord を使ってみた.

PassiveRecord は,ハッシュを ActiveRecord っぽく扱えるようにしてくれる.要 ActiveRecord.

# コマンドラインから gem でインストール
$ sudo gem install passiverecord

# 使うときは require
require 'passive_record'

今回動かした環境では ActiveRecord と PassiveRecord を両方 require したら

Gem::Exception: can't activate activerecord (>= 0, = 1.15.3), already activated activerecord-2.0.2.9216]

とエラーが出たので, PassiveRecord だけ require するようにした.

アプリの中で,ほとんど追加・更新がないようなデータ,テーブルを作って管理するよりは,オンメモリで処理したいデータ,など,あるかと思います.

README を見ればすぐに使い方は分かる.クラス定義の中にレコードも書く.ActiveRecord と同じように find で必要なものだけ取り出したり,has_many で他のクラスとのリレーションを記述したりできるので,ハッシュでデータを持つより扱いやすい.

class Continent < PassiveRecord::Base
  has_many :countries # => an ActiveRecord class

  schema :name => String, :size => Integer, :population => Integer

  create :name => "Africa",        :size => 30370000, :population =>  890000000
  create :name => "Antarctica",    :size => 13720000, :population =>       1000
  create :name => "Australia",     :size =>  7600000, :population =>   20000000
  create :name => "Eurasia",       :size => 53990000, :population => 4510000000
  create :name => "North America", :size => 24490000, :population =>  515000000
  create :name => "South America", :size => 17840000, :population =>  371000000
end

Continent.find(1)                                    # => Africa
Continent.find_by_name("Africa")                   # => Yes, also Africa
Continent.find_by_name_and_size(/America/, 17840000) # => South America
Continent.find_all_by_population(1000..20000000)     # => Antarctica and Australia
Continent.find(:all)                                 # => All 6 (though not in any particular order, yet)

README を見ると

* some integrated ActiveRecord associactions, ie: ActiveRecord#belongs_to(:passive_record)
  PassiveRecord#has_many(:active_records) (excluding has_many :through)

「has_many :throught は使えないよ」って書いてあるんだけど,CHANGELOG には

v0.2. has_many :through is in the house.

「v0.2 で has_many :throught 登場!」っぽく書いてある.よく分からないけど,試しにコードを書いてみたら動いたから,多分,実装されていると思うよ!

雑感

ソースコードを書き換えるだけでテーブルのスキーマを書き換えられるので,アプリ開発の序盤,まだモデルの詳細まで決まっていない段階で,とりあえず動くものを作りたいときには,PassiveRecord 良さげ.モックとして使える.必要になればすぐに ActiveRecord に置き換えることができる.

関連

PassiveRecordで不要なクエリ発行を抑える – pLab blog

おもしろかったら、シェアやブックマークや送金などぜひぜひお願いします。サイト運営の励みになります!

シェアや送金などお待ちしています!