私のデータベースでは、すべての外部キーを に設定しましたunsigned int not null default 0
。その結果、私の Rails アプリでは、id=0 のオブジェクトに対するクエリが大量に発生します。次に例を示します。
class Foo < ActiveRecord::Base
belongs_to :bar
end
class Bar < ActiveRecord::Base
end
コンソールで、これを行うと:
Foo.new.bar
次に、このクエリが実行されます。
SELECT `bars`.* FROM `bars` WHERE `bars`.`id` = 0 LIMIT 1
モンキー パッチを試してみましたが、method_missing はこの種の呼び出しをキャッチできないようです。スキーマを変更したくありません (現時点では変更できません)。これを回避できると思われる唯一の方法は、手動で常に bar_id != 0 をチェックすることですが、それはあまりきれいではないようです。
アイデア/提案?
明確にするために、スキーマを変更したくありません。問題は、0 と nil の両方が無効な ID と見なされるように ActiveRecord を構成/ハッキングして、id=0 のオブジェクトに対するクエリを防止できるかどうかです。