【问题标题】:Broken foreign keys in RailsRails 中的外键损坏
【发布时间】:2009-03-16 23:10:34
【问题描述】:

所以这里有一个简单的问题。我正在使用带有庞大遗留数据库的 Rails,它有许多损坏的外键需要被视为 nil。

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

使用 SELECT * FROM 条 WHERE id IN (...) 连接所有条的 Rails。到目前为止一切顺利,只有两个 sql 查询。

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

有什么简单的方法可以检查 foo.bar 是否已经设置,并且不只是强制它为零?

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

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

    foo.bar.loaded?
    

    如果您知道您使用了:includefoo.bar.loaded? 返回false 的事实,那么您摔倒了一个损坏的键,请跳过此foo.bar

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      • 2018-08-25
      • 2013-04-09
      • 1970-01-01
      相关资源
      最近更新 更多