如何深入了解Active Record关联元信息?

时间:2013-10-30 22:42:01

标签: ruby activerecord

我有一张表格,其中包含从外部来源提取的数据。它有三个不同的列,本质上是分层的,并引用其他表。但是,外键不受约束,因此这些字段中的数据不一定有效。

我正在尝试编写一些通用的东西,这些东西会打印出任何记录,这些记录的值不会引用给定日期的父表中的现有行。

我基本上得到了这样的东西:

klass.where(:date => date).each do |rec|
    next if rec.send(parent)
    # do stuff with rec
end

其中klass是表的模型,parent是声明的'belongs_to'关联的符号。

此方法有效,但当天可能有数万条记录,但密钥上的唯一值小于100.重复查找父表是非常耗时的。我想要做的是隐藏我已经查找过的所有密钥,只对新密钥执行查找。

为此,我希望能够在运行时检索具有外键引用的字段名称。理想情况下,无论是否使用默认命名约定,这都可以工作。

1 个答案:

答案 0 :(得分:1)

您不会显示您的架构,但这需要在您的数据库表中受到攻击,而不是在代码中,特别是如果您正在处理“成千上万”的记录。

作为第一次尝试,我有一个“last_checked”字段,它是一个DateTime值。在程序运行开始时,我将捕获该字段的最大值,+ 1秒,作为我的last_ran值。任何比那个时间早的记录都是候选人。您查看的每条记录都会将last_checked字段更新为当前DateTime.now值。你可以减少候选记录列表,而不会以这种方式击败Ruby。