Реализуем конечный автомат для модели рельсов - PullRequest
0 голосов
/ 22 апреля 2019

У меня есть модель rails Creative, которая реализует рабочий процесс с использованием гема aasm. В настоящее время в моей модели реализован только один рабочий процесс.

У меня есть бизнес-сценарий, который потребует от меня реализации другого рабочего процесса в той же модели, который будет активирован, если логическое значение для модели будет true.

Я вижу 2 подхода, которые могут быть жизнеспособными вариантами

  • Создайте новую модель, которая использует то же имя таблицы, что и Creative, и реализуйте там рабочий процесс
  • Реализация рабочего процесса в той же модели с использованием отдельного столбца для хранения состояний для второго рабочего процесса и использование его метода в зависимости от моего логического значения

Каким будет хороший дизайн, который можно реализовать здесь?

Я понимаю, что это очень открытый вопрос, и хотел бы получить предложения, если кто-нибудь сталкивался с таким сценарием

1 Ответ

1 голос
/ 22 апреля 2019

Я думаю, что-то вроде этого должно работать.

event :promote do
  transitions :from => [:pending], :to => :in_progress, :guard => :boolean_check?
  transitions :from => [:pending], :to => :done
end

event :complete do
  transitions :from => [:in_progress], :to => :done, :guard => :boolean_check?
end

private

def boolean_check?
  self.boolean_column
end

Если логическое значение истинно, поток будет

pending > in_progress > done

иначе

pending > done

ПРИМЕЧАНИЕ: Это может стать сложным, если, скажем, у вас есть 3-4 рабочих процесса.

Это нормально, пока у вас нет 2 рабочих процессов

...