簡體   English   中英

序列化和反序列化ActiveRecord范圍

[英]serialize and deserialize an ActiveRecord scope

我們正在嘗試找到一種有效的方法來將大量記錄傳遞到Rails中的后台作業。 目標是在工作內部有一個范圍,以便我們可以處理.includes等。 現在,我們最好的是在客戶端上的User.active.pluck(:id)並在用戶User.where(id: passed_in_ids) 我想知道是否有任何方法可以實際范圍化范圍並在工作中重新構造范圍。

我可以看到在客戶端上使用User.active.to_sql ,但是在作業內部,我看到的唯一選項是User.find_by_sql(passed_in_query) ,但這返回一個數組而不是AR作用域。 還有其他選擇嗎?

您可以使用User.unscoped.from("(#{passed_in_query}) users")重新創建ActiveRecord關系。 雖然您會丟失渴望加載的關聯,但是加載這些關聯可能是工作的責任。

可能有一種更清潔的方法來實現所需的目標,但是如果不訪問調度后台作業的代碼,很難說出來。 我猜想將您最初構建的查詢封裝在可以在作業中重用的范圍內。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM