hene

hene.dev

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_scopenil になって RSpec が落ちていました。

relation

そこで、current_scopenil になるときは、 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_scopescoperelation について、よく理解していないので学んでいきます。

ほか対応したいところ

下記 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.

参考

関連記事