Любые рекомендации для реализации пользовательского рабочего процесса в Ruby? - PullRequest
0 голосов
/ 19 апреля 2010

Я заинтересован в создании системы, в которой пользователь может определять шаги в рабочем процессе. Есть ли драгоценный камень, который уже обрабатывает это? Я думал об одном из драгоценных камней конечного автомата, но все они, кажется, для предопределенных состояний. Я подумал, может быть, я могу использовать конечный автомат для отдельных типов шагов ... Шаг электронной почты может иметь несколько состояний [Новый, Назначенный, Готово], и рабочий процесс может быть просто списками этих шагов с состоянием. Есть ли другие решения?

Ответы [ 3 ]

2 голосов
/ 19 апреля 2010

Попробуйте Ruote . Это полноценный рабочий процесс, построенный на основе Ruby.

Документация:

Страница документации Ruote 1

Страница документации Ruote 2

Создание процесса Ruote

2 голосов
/ 19 апреля 2010

Для конечного автомата позвольте мне предложить еще один: рабочий процесс

Причина, по которой все гемы используют «предопределенные» состояния, заключается в том, что обычно с состояниями связан некоторый код ruby: вы говорите такие вещи, как «когда происходит переход из этого состояния в это состояние, выполняйте этот код» или «перед тем, как переходя отсюда туда, проверь этот рубиновый охранник ". Такая функциональность не может быть реализована, если состояния не являются несколько «жестко закодированными».

Если вам просто нужно текстовое поле без какого-либо выполнения кода, вы можете просто использовать простую модель «State», содержащую:

  • Имя (строка)
  • идентификатор_пользователя, который создал это состояние (или идентификатор_группы, если вы используете что-то более сложное)
  • Модель, для которой это состояние. Это может быть целое число или строка, в зависимости от ваших вкусов.
  • Состояние parent_id (может быть нулевым). Как правило, acts_as_tree поможет вам в этом.

Предполагая, что вы используете user_id и строку для модели, раскрывающийся список состояний для электронного письма будет выглядеть следующим образом:

@states = State.find(:conditions => {
  :user_id => current_user.id,
  :model_name => 'State',
  :parent_id => 4 #so you get the possible states that follow "New"
})

Если вам do необходимо выполнить какой-то код при переходе / защите, вам нужно будет использовать предопределенные состояния. Это также возможно, но вам придется немного изменить свои требования: вместо того, чтобы позволять пользователям определять свои собственные состояния, вы оставляете им «активировать» некоторые из них из списка. Тогда «пользователь активировал это состояние» будет просто еще одним «стражем» в вашей системе состояний.

РЕДАКТИРОВАТЬ: добавлены ссылки parent_id и acts_as_tree

0 голосов
/ 19 апреля 2010

Вы ищете что-то вроде конечного автомата?

http://slagyr.github.com/statemachine/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...