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 に置き換えることができる.