1

我正在开发一个使用AASMgem 将特定对象转换为不同状态的 Rails 应用程序。

需要具有“预先批准”的初始状态,但前提是“已接受”属性设置为假。有没有办法使用AASMgem 进行自动转换?

以下是各州:

  aasm column: :status do
    state :pre_approval, initial: true
    state :pending
    state :opened
    state :closed

    event :approved do
      transitions from: :pre_approval, to: :pending, guard: :approved_changed?
    end

    event :received, after: Proc.new { set_received_date } do
      transitions from: :pending, to: :opened
    end

    event :complete, after: Proc.new { set_completion_date } do
      transitions from: :opened, to: :closed
    end
  end
4

1 回答 1

0

在这里,您可以看到所有可能的回调列表,以及它们的调用顺序:

begin
  event           before
  event           guards
  transition      guards
  old_state       before_exit
  old_state       exit
  transition      after
  new_state       before_enter
  new_state       enter
  ...update state...
  event         success             # if persist successful
  old_state       after_exit
  new_state       after_enter
  event           after
rescue
  event           error
end

新状态有三个回调:before_enter,enter,after_enter,但没有警卫。所以我认为如果你想在某些条件为真时设置初始状态,最好的方法是使用rails的before_create回调。

顺便说一句,我不认为aasm应该为状态添加警卫。因为状态是特定状态,而不是动作。我们可以添加回调进入或退出这个状态。

有没有办法使用 AASM gem 进行自动转换?

不,但您可以在 aasm 回调或 rails 回调中调用事件。

于 2015-08-18T15:16:31.907 回答