Rails 5.2.2 の current_scope が nil になる
Rails 5.2.2 の current_scope が nil になる
Rails と Ruby のアップデート - hene.dev の続き。
テストが落ちていて、ページの挙動もおかしかったので修正しました。
Rails, Ruby のバージョン
$ rails -v
Rails 5.2.2
$ ruby -v
ruby 2.6.1p33 (2019-01-30 revision 66950) [x86_64-darwin17]
current_scope
# app/models/sample.rb
class Sample < ApplicationRecord
scope :sample_scope, lambda { |param|
current_scope.where(sample: param).xxx
}
}
current_scope
が nil
になって RSpec
が落ちていました。
relation
そこで、current_scope
が nil
になるときは、
relation
を使うように変更しました。
# app/models/sample.rb
class Sample < ApplicationRecord
scope :sample_scope, lambda { |param|
current_scope || relation
.where(sample: param).xxx
}
}
テストは落ちなくなったのですが、ページを見てみると挙動がおかしいままでした。
解決?
そこで、current_scope
を消してみました。
# app/models/sample.rb
class Sample < ApplicationRecord
scope :sample_scope, lambda { |param|
where(sample: param).xxx
}
}
上記の変更で、問題なく動くようになりました。
とりあえず動くようになりましたが、
current_scope
や scope
、 relation
について、よく理解していないので学んでいきます。
ほか対応したいところ
下記 warning
を直したい。
/Users/xxxxxx/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/activerecord-5.2.2/lib/active_record/connection_adapters/mysql/database_statements.rb:34: warning: BigDecimal.new is deprecated; use BigDecimal() method instead.