私は、特定のジョブを処理する2つの "エンジン"を持っています。それぞれのツールは異なるツール/ apiを使用しています。私はEngine
モデルを持っていますが、それらの間に共通のデータ/動作を保持していますが、それぞれEngine
には他の特定のフィールドやメソッドがあります。私が何をしたいかインスタンス化するRailsモデルを動的に選択するにはどうすればよいですか?
class Engine
field :name
field :status
end
class DefaultEngine
field :job_id
def process
# default engine process
# ...
end
end
class SpecialEngine
def process
# special engine process
# ...
end
end
class Site
field :engine, type: String, default: '::DefaultEngine'
end
はsite.engine
値に応じて、正しいエンジンをサブクラス化するためのEngine
が責任を作るです。たとえば、コントローラでは次のようにしたいと考えています。
def start
job = Engine.create()
job.process
end
私はいずれのエンジンも直接参照しません。代わりに、Engine
に、正しいエンジンがどれかを判断する責任があります。これを処理する方法は何ですか。Engine.create
は、SpecialEngine
またはDefaultEngine
のインスタンスを返すことができます。