Rails中的外键损坏

时间:2009-03-16 23:10:34

标签: ruby-on-rails activerecord

所以这是一个简单的问题。我正在使用带有巨大遗留数据库的Rails,并且它有许多需要被视为nils的破坏的外键。

所以当我这样做时:Foo.find(:all,:conditions => {...},:include =>:bar)

使用SELECT * FROM栏连接所有栏的Rails WHERE ID IN(...)。到目前为止这么好,只有两个SQL查询。

现在的问题是,对于破解的fks,当我稍后尝试执行foo.bar时,Rails尝试使用SELECT * FROM bars WHERE id = broken_id来重新获取bar。然后它返回nil(对我来说正确),但所有那些SELECT id =结果是一个主要的性能问题,因为它用太多的SQL查询轰炸mysql。

检查foo.bar是否已经设置,以及是否只是强制它为零,这是一种简单的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用loaded?方法测试关联是否已加载:

foo.bar.loaded?

如果您知道自己曾使用过:includefoo.bar.loaded?返回false这一事实,那么您可以查看已故的fkey,跳过此foo.bar