web-dev-qa-db-fra.com

Comment réparer l'avertissement de dépréciation: les méthodes de niveau de classe ne feront plus d'hériter de scoper à partir de Rails 6.1?

Récemment mis à jour mon Rails App to 6.0. Lorsque j'exécute mes tests, je reçois l'avertissement de dépréciation suivant d'une portée sur mon Referral Modèle:

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)

Mon Referral modèle de modèle en question est hacky, mais écrit comme ceci:

  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)
  }

J'ai cherché partout sur Internet pour obtenir des conseils sur la manière de corriger cette dépréciation, y comprisles rails GithubR PR fait le changement, mais n'a pas trouvé de claire Explication anglaise n'importe où.

Comment puis-je réparer cette portée obsolète pour le rail 6.1?

9
Kelsey Hannan

Fait l'avertissement de dépréciation disparle en mettant à jour les appels à l'intérieur de la portée de 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)
  }
3
Kelsey Hannan