我有一张表格,其中包含从外部来源提取的数据。它有三个不同的列,本质上是分层的,并引用其他表。但是,外键不受约束,因此这些字段中的数据不一定有效。
我正在尝试编写一些通用的东西,这些东西会打印出任何记录,这些记录的值不会引用给定日期的父表中的现有行。
我基本上得到了这样的东西:
klass.where(:date => date).each do |rec|
next if rec.send(parent)
# do stuff with rec
end
其中klass
是表的模型,parent
是声明的'belongs_to'关联的符号。
此方法有效,但当天可能有数万条记录,但密钥上的唯一值小于100.重复查找父表是非常耗时的。我想要做的是隐藏我已经查找过的所有密钥,只对新密钥执行查找。
为此,我希望能够在运行时检索具有外键引用的字段名称。理想情况下,无论是否使用默认命名约定,这都可以工作。
答案 0 :(得分:1)
您不会显示您的架构,但这需要在您的数据库表中受到攻击,而不是在代码中,特别是如果您正在处理“成千上万”的记录。
作为第一次尝试,我有一个“last_checked”字段,它是一个DateTime值。在程序运行开始时,我将捕获该字段的最大值,+ 1秒,作为我的last_ran
值。任何比那个时间早的记录都是候选人。您查看的每条记录都会将last_checked
字段更新为当前DateTime.now
值。你可以减少候选记录列表,而不会以这种方式击败Ruby。