3

別の形式からデータベースにプッシュするレコードのグループがあります。レコードのおそらく一意の ID によると、データベースにプッシュしたレコードの一部がロールバックされています。重複しているとのことです。しかし、私はそれをチェックアウトしましたが、それらは非常に似ていますが、記録に違いがあり、データベースにデータを入れる前にデータを処理しているときに何らかのエラーが発生したか、重複したデータベースを維持する際にこの特定の州政府が失敗したことを示しています同じエンティティのレコード。今はよくわかりません。

この公式レコード/リストからのいわゆる「重複」をデータベースに保存したいのですが、それらにブール列でフラグを立てます。デフォルトでそのモデルのクエリ。

理想的には、これにより、次のような動作を引き起こす何かを実行できるようになります。

ModelName.all.count
#=> 500

ModelName.count
#=> 623

ModelName.include_alleged_duplicates.count
#=> 623

物事をひどく壊さずにこれを行う方法はありますか?

4

2 に答える 2

5

あなたが探しているのは、Rails API でここdefault_scopeに文書化されているようです。

したがって、モデルの変更は次のようになります。

class ModelName
    default_scope where(:duplicate => false)

    ...

    def self.include_alleged_duplicates
        unscoped
    end
end

unscopedモデル上でスコープなしで実行されます。unscoped のドキュメントを参照してください。

唯一の問題は、モデル内のすべてのリレーションでdefault_scope使用されることです。あなたの例のように:

ModelName.all意志を持ってdefault_scope実行するModelName.where(:duplicate => false).all

ますます使用している場合はunscoped、ロジックを逆にして、重複レコードを にしdefault_scope、一意のレコードを にすることを検討してくださいunscoped

お役に立てれば!

于 2013-11-03T03:33:40.017 に答える