Ruby 如何挖掘活动记录关联元信息?

Ruby 如何挖掘活动记录关联元信息?,ruby,activerecord,Ruby,Activerecord,我有一个表,其中包含从外部源提取的数据。它有三个不同的列,它们本质上是分层的,并引用其他表。但是,外键不受约束,因此这些字段中的数据不一定有效 我正在尝试编写一些通用的东西,它将打印出在给定日期具有不引用父表中现有行的值的任何记录 我基本上有这样的东西: klass.where(:date => date).each do |rec| next if rec.send(parent) # do stuff with rec end 其中,klass是表的模型,parent

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

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

我基本上有这样的东西:

klass.where(:date => date).each do |rec|
    next if rec.send(parent)
    # do stuff with rec
end
其中,
klass
是表的模型,
parent
是声明的“所属”关联的符号

但是,这种方法是有效的,一天可能有成千上万条记录,但键上的唯一值少于100。重复查找父表非常耗时。我想做的是隐藏我已经查找过的所有键,只对新键执行查找


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

您不显示模式,但这需要在数据库表中而不是在代码中受到攻击,特别是在处理“成千上万”条记录时


作为第一次尝试,我有一个“last_checked”字段,它是一个日期时间值。在程序运行开始时,我将捕获该字段的最大值+1秒,作为我上次运行的
值。任何早于该时间的记录都可以查看。您查看的每条记录都会将上次检查的
字段更新为当前
日期时间。现在
值。您可以缩减候选记录列表,而不必用这种方式攻击Ruby。

您不显示模式,但这需要在数据库表中而不是在代码中受到攻击,尤其是在处理“数万”条记录时


作为第一次尝试,我有一个“last_checked”字段,它是一个日期时间值。在程序运行开始时,我将捕获该字段的最大值+1秒,作为我上次运行的
值。任何早于该时间的记录都可以查看。您查看的每条记录都会将上次检查的
字段更新为当前
日期时间。现在
值。你可以减少候选记录的列表,而不必这样殴打Ruby。

我选择滥用Ruby:)我最后用reflect_on_all_associations方法绕了一圈。我在加载完一天的数据后运行这个程序,我认为最终结果与您的建议基本相同。我选择滥用Ruby:)我最终使用了reflect_on_all_associations方法。我在完全加载数据后,用一天的时间来运行它,我认为最终与您建议的基本相同。