我有一个依赖 state_machine 来管理其不同状态的模型。一个特定事件需要 before_transition,因为它需要构建一个连接表 fore 来进行转换。不幸的是,它不起作用。
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?作为假。
我错过了什么?