: проверяется с использованием логических сравнений - PullRequest
0 голосов
/ 11 октября 2011

У меня есть таблица с несколькими булевыми столбцами.

Для того, чтобы выставить счет-фактуру на покупку (первый булев), перед его выставлением счета-фактуры (второй булев) нужно указать.Буду признателен за некоторые указания относительно того, как проверять допустимые комбинации этих логических значений.

Я имею в виду что-то вроде:

:validates (!:complete and !:invoiced) or (:complete && :invoiced) or (:complete && !:invoiced)

Возможно ли это?

Ответы [ 2 ]

2 голосов
/ 11 октября 2011
1 голос
/ 11 октября 2011

Похоже, ваш BuyOrder проходит через несколько состояний в течение своего жизненного цикла, например конечный автомат .

Одна вещь, которую мы используем в производственных системах, это acts_as_state_machine , чтобы помочь в реализации этого поведения.

Позволяет определить:

  • ряд состояний, в которых может находиться объект
  • события, которые перемещают объект между состояниями
  • и, наконец, состояния, между которыми вы можете перемещаться, и состояния, между которыми вы не можете двигаться. Например, вы можете захотеть, чтобы ваш PurchaseOrder переходил от завершения-> к-> выставленному счету, но не назад от выставленного счета-> к-> завершить. acts_as_state_machine позволяет настроить это в декларативном стиле.

acts_as_state_machine позволит вам определить это сложное поведение. Чтение требует некоторого времени, чтобы понять это, но для систем, подобных этим, это спасает жизнь.

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