##class << selfとは
特異クラス定義式のこと。
クラスメソッドはクラスインスタンスに属する特異メソッドですが、上記の形式でのクラスメソッドの定義は「<<」の後ろにクラスインスタンスを指定し、その「クラスインスタンスの特異クラスを定義している」とみることができる。
https://www.school.ctc-g.co.jp/columns/nakagoshi/nakagoshi12.html
クラスメソッドを定義するときに全てのクラスメソッドにself.
をつけるのが手間なときに特異クラスを使うと便利。
foo.rb
class Foo < ApplicationRecord
class << self
def bar
puts 'bar'
end
end
end
foo.rb
class Foo < ApplicationRecord
def self.bar
puts 'bar'
end
end
上2つのコードは同じ意味になる。
##参考
より詳しい特異クラスと特異メソッドの説明は下記参考