2016-11-16 61 views
0

我正在使用我創建的服務對象計算遊戲玩家的每週排行榜統計信息。我處於一種情況,如果我想重做任何特定周的計算,我想刪除舊的統計信息,當且僅當新的統計信息已成功保存。如何在Rails中只從MySQL中刪除ActiveRecord集合中的對象?

大約我的步驟:

  1. AR查詢現有的統計數據爲給定的周成可變
  2. 運行那個星期的新統計
  3. 保存新的數據,返回如果保存成功
  4. 在成功保存新數據,從步驟1中查詢的mysql中刪除對象。

我試過使用@old_data.delete_all方法,但那會在當時從ActiveRecord_Relation對象關閉mysql運行查詢,同時銷燬新創建的數據。我只想摧毀我在創建新數據之前從查詢中保存的那些數據。

可能的解決方案我還沒有嘗試過:Sorta hacky,但通過更新任意值的舊數據查詢中的所有對象的任意列並使用delete_all關閉該任意值的查詢來標記舊數據...這聽起來不像是做事情的有力方式,而且還增加了額外的查詢。

回答

2

而不是添加一個標誌,你可以簡單地pluck老行的id,然後運行一個新的查詢刪除這些。按定義,delete_all方法運行一個新的查詢,所以沒有辦法凍結舊的結果並直接刪除它們。

您也可以嘗試直接更新的行如果許多領域(比如player_idgame_id或東西)是相同的,從一週一週...

+0

它從字面上明白了我的答案是多麼簡單,我回過頭來發布它,第二個答案!只要計時器到期,我會立即將您的標記標記爲正確。謝謝! –

0

我可以從ActiveRecord的查詢摘去IDS舊數據。然後使用delete_all關閉這些ID

相關問題