1

外部ソースから取得したデータを含むテーブルがあります。本質的に階層的で、他のテーブルを参照する 3 つの異なる列があります。ただし、外部キーは制約されていないため、これらのフィールドのデータは必ずしも有効ではありません。

特定の日付の親テーブルの既存の行を参照しない値を持つレコードを出力する汎用的なものを作成しようとしています。

私は基本的に次のようなものを持っています:

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

klassはテーブルのモデルであり、宣言された「 belongs_to parent」関連付けのシンボルです。

この方法は機能しますが、1 日に何万ものレコードが存在する可能性がありますが、キーの一意の値は 100 未満です。親テーブルへの繰り返しのルックアップには、不快なほど時間がかかります。私がやりたいことは、すでに検索したすべてのキーを隠し、新しいキーでのみ検索を実行することです。

この目的のために、実行時に外部キー参照を持つフィールド名を取得できるようにしたいと考えています。デフォルトの命名規則を使用しているかどうかに関係なく、これが機能することが理想的です。

4

1 に答える 1

1

スキーマは表示されませんが、特に「数万」のレコードを扱っている場合は、コードではなく、データベース テーブルで攻撃する必要があります。

最初の試みとして、DateTime 値である「last_checked」フィールドを用意します。プログラムの実行開始時に、そのフィールドの最大値 + 1 秒をlast_ran値として取得します。その時間よりも古いレコードは、参照の候補です。参照する各レコードのlast_checkedフィールドが現在の値に更新されDateTime.nowます。そのように Ruby を打ち負かすことなく、候補レコードのリストを絞り込むことができます。

于 2013-10-31T00:09:07.607 に答える