如何修复DEPRECATION警告:类级方法将不再继承Rails6.1中的作用域



最近将我的Rails应用程序更新到6.0。当我运行测试时,我从我的Referral模型上的一个作用域收到以下弃用警告:

DEPRECATION WARNING: Class level methods will no longer inherit scoping from `with_all_final_state_fulfillments` in Rails 6.1. To continue using the scoped relation, pass it into the block directly. To instead access the full set of models, as Rails 6.1 will, use `Referral.unscoped`. (called from block in <class:Referral> at /Users/home/workspace/APPNAME/app/models/referral.rb:60)

我的Referral模型范围有问题,很粗糙,但写起来是这样的:

scope :with_all_final_state_fulfillments, lambda {
final_state_ids = Referral.with_fulfillment_in_final_state.pluck(:id).uniq
not_final_state_ids = Referral.where(id: final_state_ids).with_fulfillment_not_in_final_state.pluck(:id).uniq
id_list = final_state_ids - not_final_state_ids
Referral.where(id: id_list)
}

我在互联网上搜索了所有关于如何修复这种贬损的建议,包括Rails GitHub PR做出的改变,但在任何地方都没有找到明确的英文解释。

如何修复Rail 6.1的这个不推荐使用的范围?

通过将Referral.的内部作用域调用更新为self.:使弃用警告消失

scope :with_all_final_state_fulfillments, lambda {
final_state_ids = self.with_fulfillment_in_final_state.pluck(:id).uniq
not_final_state_ids = self.where(id: final_state_ids).with_fulfillment_not_in_final_state.pluck(:id).uniq
id_list = final_state_ids - not_final_state_ids
where(id: id_list)
}

最新更新