недопустимый аргумент: ошибка nil после обновления до Rails 5

Я обновился до Rails 5, и после запуска сервера должны быть загружены формы входа. Затем возникает эта ошибка:

ArgumentError - invalid argument: nil.:
  activerecord (5.0.0.1) lib/active_record/relation/spawn_methods.rb:36:in `merge'
  activerecord (5.0.0.1) lib/active_record/scoping/default.rb:119:in `block (2 levels) in build_default_scope'
  activerecord (5.0.0.1) lib/active_record/scoping/default.rb:117:in `block in build_default_scope'
  activerecord (5.0.0.1) lib/active_record/scoping/default.rb:141:in `evaluate_default_scope'
  activerecord (5.0.0.1) lib/active_record/scoping/default.rb:116:in `build_default_scope'
  activerecord (5.0.0.1) lib/active_record/scoping/named.rb:33:in `default_scoped'
  activerecord (5.0.0.1) lib/active_record/scoping/named.rb:28:in `all'
  activerecord (5.0.0.1) lib/active_record/scoping.rb:24:in `scope_attributes'
  activerecord (5.0.0.1) lib/active_record/scoping.rb:36:in `populate_with_current_scope_attributes'
  activerecord (5.0.0.1) lib/active_record/scoping.rb:43:in `initialize_internals_callback'
  activerecord (5.0.0.1) lib/active_record/core.rb:317:in `initialize'
  activerecord (5.0.0.1) lib/active_record/inheritance.rb:65:in `new'
  devise (4.2.0) app/controllers/devise/sessions_controller.rb:9:in `new'

Это, кажется, исходит от Devise, я думаю? После поиска я нашел кого-то с той же ошибкой:

Turns it it was a gem which behind the scenes was attempting to do default_scope { nil }, looks like someone implemented protection against that (since it shouldn't really work)

Что я должен делать?


person John    schedule 02.11.2016    source источник
comment
Глупый вопрос: нужно ли обновляться до Rails 5? Вы пытались обновить гем разработки?   -  person Eric Duminil    schedule 02.11.2016
comment
Да, я тоже обновил Devise   -  person John    schedule 02.11.2016


Ответы (1)


nil больше не является допустимым параметром merge, так как этот метод ожидает параметр класса ActiveRecord_Relation.

Эта проблема связана с этим PR на Rails. Это фиксация разрешения на рельсах.

Чтобы избежать этой ошибки:

  • проверьте атрибут merge перед его вызовом в отношении и добавьте его, только если он не равен нулю.
  • или всегда передавайте действительное значение ActiveRecord_Relation в merge, например <ARModel>.all вместо nil, если фактический параметр равен nil.
person Andrea Salicetti    schedule 02.05.2019