Rails AASM自动状态转换

时间:2014-07-17 15:17:10

标签: ruby-on-rails aasm

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

需要预先批准"预先批准"但只有在接受"属性的情况下才会被接受。设置为false。有没有办法使用AASM gem进行自动转换?

以下是各州:

  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

1 个答案:

答案 0 :(得分: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 {{1回调。

顺便说一句,我不认为aasm应该为国家添加警卫。因为状态是特定状态,而不是动作。我们只能添加回调进入或退出此状态。

  

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

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