1

私はどちらかを選択することに反対しました #1 :

class Abstract
end
class Abstract::Foo < Abstract
end
class Abstract::Bar < Abstract
end

対#2:

module Abstract
  class Base
  end
  class Foo < Base
  end
  class Bar < Base
  end
end

Abstract名前空間のように感じたので、オプション#2を選択することになり、最終的には次のようなものを追加できました

module Abstract # Instead of class if I had used option #1
  class SomeAbstractService
  end
end

Abstract::Base.some_class_methodしかし、私は呼び出しが少し奇妙だと感じています。モジュール関数委任を追加することは可能ですか? たとえば、私Baseのモデルが ActiveRecord または Mongoid モデルの場合 (つまり、Foo と Bar は STI のようなものです)、コレクション/テーブルを次のようにクエリできるようにしたいと考えています。

Abstract.where(...)それ以外のAbstract::Base.where(...)

.whereモジュール関数を定数/クラスに委譲することは可能Baseですか?

何かのようなもの

module Abstract
  class Base
  end

  delegate_module_function :where, to: :Base
end

または、それを行うための別の/より良い方法はありますか?

4

1 に答える 1