我们正在尝试找到一种有效的方法来将大量记录传递到Rails中的后台作业。目标是在工作内部拥有一定的范围,以便我们可以坚持.includes
等。目前,我们最好的办法是User.active.pluck(:id)
在客户端和工作User.where(id: passed_in_ids)
中。我想知道是否有任何方法可以真正范围化范围并在工作中重新构造范围。
我可以看到在客户端上使用了User.active.to_sql
,但是在作业内部,我看到的唯一选择是User.find_by_sql(passed_in_query)
,但这返回一个数组而不是AR范围。有其他选择吗?
答案 0 :(得分:0)
您可以使用ActiveRecord
重新创建User.unscoped.from("(#{passed_in_query}) users")
关系。虽然您会丢失渴望加载的关联,但是加载这些关联可能是工作的责任。
可能有一种更清洁的方法来实现所需的目标,但是如果不访问调度后台作业的代码,很难说。我想将您最初建立的查询封装在一个可以在工作中重用的范围内。