2016-11-16 3 views
0

私は作成したサービスオブジェクトを使用して、ゲームのプレイヤーの毎週のランキングを計算しています。私は、特定の週の計算をやり直したい場合、新しい統計が正常に保存された場合にのみ古い統計を削除したいという状況にあります。RailsでmysqlのActiveRecordコレクションからオブジェクトだけを削除するには?

大雑把に私の手順:変数

  • 実行に、指定した週の

    1. ARクエリ既存の統計その週の新しい統計
    2. 保存新しいデータを、保存が成功した場合の復帰
    3. オン新しいデータの保存が成功したら、手順1のクエリのmysqlからオブジェクトを削除してください。

    私はその時点でmysqlのActiveRecord_Relationオブジェクトからクエリを実行するだけで、新しく作成されたデータも破棄されます。私は新しいデータを作成する前に私がクエリから保​​存したものを破壊したいだけです。

    考えられる解決法私は試したことがありません:古いデータを古いデータクエリ内のすべてのオブジェクトの任意の列を任意の値で更新し、その任意の値のクエリをオフにしてdelete_allを使用して古いデータにフラグを付けます。これは、物事を進めるための道のりのようなものではなく、追加のクエリを追加します。

  • 答えて

    2

    フラグを追加する代わりに、単純にpluckの古い行のIDを削除して、新しいクエリを実行して削除することができます。定義によるメソッドdelete_allは新しいクエリを実行するので、古い結果をフリーズして直接削除する方法はありません。私はちょうどのActiveRecordのクエリからIDを摘み取ることができ

    +0

    これは文字通り私にとって初めての答えでした。タイマーの期限が切れるとすぐに私はあなたのものを正しいものとしてマークします。ありがとう! –

    0

    ます。また、フィールド(たとえばplayer_idgame_idか何か)の多くは週から週に同じであれば、直接の行を更新してみてください...古いデータその後、delete_allをこれらのIDから外して使用してください。

    関連する問題