gpt4 book ai didi

ruby-on-rails - state_machine 对转换的验证

转载 作者:行者123 更新时间:2023-12-01 05:16:56 29 4
gpt4 key购买 nike

使用 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"'

但这似乎错过了过渡点。

另外,由于我在回调中绑定(bind)到对象,它如何有条件地调用“验证”,一个类方法? (绑定(bind)是必要的,因为回调中的许多方法都是私有(private)的。)

最佳答案

您是否考虑过使用 transition if: :x特征?

它应该像这样工作:

event :coming_of_age do
transition :child => :adult, if: :coming_of_age_party_in_the_future
end

您可以在 README 中看到“示例”中的“类定义”部分(靠近顶部)或“语法灵 active ”中的“转换上下文”(非常低)。

关于ruby-on-rails - state_machine 对转换的验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19433554/

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