コードを整理する際に、classではなく、moduleで整理したいと思う場面がありました。
Railsで書いていることもあり、ActiveSupport::Concernにまとめる形にします、 moduleクラスに機能を混ぜ合わせることで複数のクラスで機能を共有する(Mix-in)という機能を提供しています。
さらにActiveSupport::Concernは、関心事を分離するために独立した機能を定義したモジュールが配置されますので、これを利用することにします。
ActiveSupport::Concern
module DataAble
extend ActiveSupport::Concern
included do
scope :with_deleted -> { where.not(deleted_at: nil) }
scope :without_deleted -> { where(deleted_at: nil) }
end
def set_data
@data = Data.pluck(:id, :name)
end
end
class Hoge include SetDataAble end
これで, できるようになります。
@hoge = Hoge.new @hoge.set_date Hoge.with_deleted
参考
ruby on rails - なぜRailsのモジュールでは"able"をサフィックスとして付けるのでしょうか? - スタック・オーバーフロー