繁体   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