gpt4 book ai didi

ruby-on-rails-4 - 如何在关注点中定义 state_machine?

转载 作者:行者123 更新时间:2023-12-05 00:27:33 25 4
gpt4 key购买 nike

我正在尝试将一些重复的逻辑分解为 concern .部分重复的逻辑是 state_machine .

简化后,Database , Site , SftpUser以及更多包含,其中包括:

class Database < ActiveRecord::Base
# ...
state_machine :deploy_state, initial: :halted do
state :pending
end
end

我正在尝试将其重构为一个问题:
module Deployable
extend ActiveSupport::Concern

included do
state_machine :deploy_state, initial: :halted do
state :pending
end
end
end

# Tested with:
class DeployableDouble < ActiveRecord::Base
extend Deployable
end

describe DeployableDouble do
let(:subject) { DeployableDouble.new }

it "should have default state halted" do
subject.deploy_state.must_equal "halted"
end
end

但是,这不是实现 state_machnine 的正确方法。在 concern ,因为这会导致: NoMethodError: undefined method 'deploy_state' for <DeployableDouble:0xb9831f8> .这表明 Double 根本没有分配状态机。

included do实际上正确的回调来实现这个? state_machine 是否有问题? ,它需要 ActiveRecord::Base 的子类吗?我没有得到什么?我对关注的概念很陌生。

最佳答案

好的。我觉得自己真的很愚蠢。一个不应该extend一个带有模块的类,但是 include那个模块。明显地。

# Tested with:
class DeployableDouble
include Deployable
end

您在编写后监督的这些事情之一。此外,扩展 ActiveRecord::Base不需要,因为 state_machine 只是普通的旧 Ruby 并且适用于通用 Ruby 对象。

关于ruby-on-rails-4 - 如何在关注点中定义 state_machine?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20396103/

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