我正在使用一个使用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
答案 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回调中调用一个事件。