在我的数据库中,我已将所有外键设置为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,但这似乎不是很干净。
想法/建议?
澄清一下,我不想更改架构。问题是:ActiveRecord 是否可以被配置/破解,使得 0 和 nil 都被视为无效 id,从而阻止对 id=0 对象的任何查询?