これ僕.com:行動分析学マニアがおくる行動戦略

意図と行動のギャップから生じる「不自由さ」への挑戦。果たして僕たちに自由はあるのか?

ActiveRecordで複合主キーを使うメモ

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

です。