Как исправить ПРЕДУПРЕЖДЕНИЕ ОБ УСТРОЙСТВЕ: Методы уровня класса больше не будут наследовать область видимости в Rails 6.1? - PullRequest
0 голосов
/ 31 октября 2019

Недавно обновил мое приложение 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?

1 Ответ

2 голосов
/ 31 октября 2019

Убрано предупреждение об устаревании, обновив вызовы из области видимости от 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)
  }
...