使用state_machine gem,我希望获得仅在转换时运行的验证。例如:
# Configured elsewhere:
# StateMachine::Callback.bind_to_object = true
class Walrus > ActiveRecord::Base
state_machine :life_cycle, :initial => :fetus do
state :fetus
state :child
state :adult
state :dead
event :coming_of_age do
transition :child => :adult
end
before_transition :child => :adult do
validate :coming_of_age_party_in_the_future
end
end
end
如果我将该验证附加到成人州,则该日期过后将失败。但我只需要它在过渡期间有效。我可以添加类似的内容:
validate :coming_of_age_party_in_the_future, if: 'adult? && life_cycle_was == "child"'
但这似乎错过了过渡点。
另外,由于我在回调中绑定了对象,它如何有条件地调用'validate',一个类方法? (绑定是必要的,因为回调中的许多方法都是私有的。)
答案 0 :(得分:1)
您是否考虑过使用transition if: :x
功能?
应该是这样的:
event :coming_of_age do
transition :child => :adult, if: :coming_of_age_party_in_the_future
end
您可以在README
中的'示例'(靠近顶部)或'语法灵活性'(相当远的地方)中看到“类定义”部分