gpt4 book ai didi

ruby-on-rails - state-machines/state_machine - 转换中的下一个状态

转载 作者:行者123 更新时间:2023-12-04 03:54:44 26 4
gpt4 key购买 nike

我正在使用 https://github.com/state-machines/state_machines用于 Rails 在对象状态更改前后存储和执行工作。

我想做的是拥有一个可以在 before_transition 中调用的方法对于一组给定的 events , 对于给定的 event , 有 before_transition 调用的方法做一些不同的事情。

例如,假设该方法称为 log_state_change ,类似于:

def log_state_change
case <???>
when "successful"
Rails.logger.info "Successful"
when "failure"
Rails.logger.info "Failure"
when "starting_run"
Rails.logger.info "Starting run"
else
Rails.logger.error "Unknown"
end

我找不到适合 <???> 的方法多于。也许更熟悉此 gem 的人可以提供帮助?

最佳答案

您可以在 before_transition 回调中接受一个参数,并获取实现预期行为所需的所有数据。

您可以在 the source code of the library 找到传递参数的代码.您也可以使用 around_transition 实现此逻辑。

require 'state_machines'

class Light

state_machine :state, initial: :off do

before_transition from: any, do: :log_me

event :light do
transition all => :on
end

event :dark do
transition [:on] => :off
end

end

def log_me(transition)
case transition.event
when :light
p "`light` event was called to transition from #{transition.from} to #{transition.to}"
when :dark
p "`dark` event was called to transition from #{transition.from} to #{transition.to}"
else
p "`#{transition.event}` was called to transition from #{transition.from} to #{transition.to}"
end
end
end

a = Light.new

a.light # => "`light` event was called to transition from off to on"
a.dark # => "`dark` event was called to transition from on to off"

关于ruby-on-rails - state-machines/state_machine - 转换中的下一个状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58312339/

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