composite_primary_keysというGemを入れると、ActiveRecordでも複合主キーが使えるようになるらしい。
Gemのインストール
% gem install composite_primary_keys Bulk updating Gem source index for: http://gems.rubyforge.org Successfully installed composite_primary_keys-1.0.3 Installing ri documentation for composite_primary_keys-1.0.3... Installing RDoc documentation for composite_primary_keys-1.0.3...
Modeの作成
% script/generate model Foo
se_primary_keysを使って複合主キーを指定。また、テーブル名を指定する必要がある場合は、set_table_nameを指定。
class Foo < ActiveRecord::Base set_primary_keys :key1, :key2, :key3 set_table_name :foo_table end
検索してみた
#find()で検索したいときは、引数にキーの配列を渡せばいいみたい。
% script/console Loading development environment (Rails 2.1.0) >> Foo.find([key1, key2, key3])
おまけ
既存のテーブルがなにやらlegendスキーマに作成されていた(PostgreSQL)。普通にテーブル名だけで検索しても、そんなテーブルは無い、と怒られる状態。「legend.テーブル名」で検索すればいけるけど、ActiveRecordでスキーマ名を指定する方法が分からず。
で、PostgreSQLの設定を変更。
(変更前)#search_path = '$user,public' # schema names (変更後)search_path = '$user,legend,public' # schema names
これで「legend.」をつけなくても検索できるようになりました。
ちなみにCentOSでyumを使ってInstallしていた場合、設定ファイルは
/var/lib/pgsql/data/postgresql.conf
です。