gpt4 book ai didi

ruby-on-rails - before_filter 在 state_machine :( 中不工作

转载 作者:太空宇宙 更新时间:2023-11-03 18:01:54 27 4
gpt4 key购买 nike

我有一个依赖 state_machine 来管理其不同状态的模型。一个特定的事件需要一个 before_transition,因为它需要在进行转换之前构建一个连接表。不幸的是,它不起作用。

class DocumentSet < ActiveRecord::Base

state_machine :state, :initial => :draft do
# Callbacks
before_transition :on=>:submit, :do=>:populate_join_table

# States
state :draft
state :submitted

# Events
event :submit do transition :draft=>:submitted, :if=>:can_submit? end
end

def populate_join_table
puts '::::::::: INSIDE POPULATE_JOIN_TABLE'
end

def can_submit?
raise "Document Set has no Document(s)" if self.document_versions.blank?
true
end

现在,当我执行 DocumentSet.submit 时,它实际上从未进入 populate_join_table,因为它评估 can_submit?为假。

我错过了什么?

最佳答案

我想我找到了解决方案。基本上发生的事情是 state_machine 首先评估 :if 条件,然后才执行 before_transition。

所以顺序是:

If (GuardCondition == true)
run before_transition
run transition
run before_transition

关于ruby-on-rails - before_filter 在 state_machine :( 中不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2292592/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com