dogwood008の開発メモ!

最近のマイブームは機械学習, Ruby on Rails。中でも機械学習を使った金融商品の自動取引に興味があります。

【Rails】ActiveSupport::Concernを使うと、お手軽にクラスメソッドとscopeやhas_many等の定義ができる

要旨

module M
  extend ActiveSupport::Concern

  included do
    scope :disabled, -> { where(disabled: true) }
  end

  class_methods do
    ...
  end
end

https://github.com/rails/rails/blob/main/activesupport/lib/active_support/concern.rb より

詳細

included のブロックは、このモジュール Minclude されたときに呼ばれる。なので、ここで scopehas_many 等の宣言ができる。

class_methods のブロックでは、クラスメソッドを定義することができる。ここのブロックで定義したメソッドは、全て自動的にクラスメソッドとして定義される。

他にも、includeする順番を考慮する必要が無くなる等のメリットがある。

参考

github.com