複数の構成ファイルを保存して使用できる yaml 構成を使用して、オンザフライでステート マシンを作成するにはどうすればよいですか?
概要
私の Rails アプリケーションには FSM を構築するという要件があり、その FSM は構成可能でなければなりません。私のアプリケーションでは、従業員が組織から退職する前に完了する必要があるいくつかのプロセスを含む従業員退職ワークフローを作成しています。そして、アプリケーションの各組織は、たとえば、この状態が遷移したときにどのイベントをトリガーするかなど、独自の終了設定を保存できる必要があるという点が重要です。それらは、状態が遷移できる外部イベントなどにすることができます。
aasm gemを試しましたが、状態を動的に作成できる機能が見つかりませんでした
解決策
これらの行に沿って、適切なモデルで yaml ファイルを使用できるようにする必要があります。
include AASM
def apply_custom_configuration(config_file_path)
config = YAML.load_file(config_file_path)
aasm do
config['states'].each do |state|
aasm_state state['name'].to_sym, initial: state['initial'] || false
end
config['events'].each do |event|
aasm_event event['name'].to_sym do
transitions from: event['from'].map(&:to_sym), to: event['to'].to_sym
end
end
end
end
次に、これらの線に沿ったものを、実際の従業員の退職が実行される場所で使用できます。
config_file_path = Rails.root.join('config', 'employee_exit_workflows', 'organization1.yaml')
employee_exit = EmployeeExit.new
employee_exit.apply_custom_configuration(config_file_path)
カスタム ワークフローをデータベースに保存してみてはどうでしょうか?
データベースにデータを永続化するには:
データベースに保存するためのスニペットは次のとおりです。
config = YAML.load_file('path_to_your_yaml_file.yaml')
custom_workflow = CustomWorkflow.new(organization: 'org_name', config: config)
custom_workflow.save
上のスニペットでは、新しいテーブルにフィールドが 2 つだけあることを前提としていますが、ニーズに合わせて変更できます。
次に、次のようにしてカスタム ワークフローを取得できます。
workflows = CustomWorkflow.where(organization: 'org_name')