我试图将一些重复的逻辑分解为关注点。部分重复逻辑是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
但是,这不是在 a 中实现 a 的正确方法state_machnine
,concern
因为这会导致:NoMethodError: undefined method 'deploy_state' for <DeployableDouble:0xb9831f8>
。这表明 Double 根本没有分配状态机。
实际上是included do
实现这个的正确回调吗?这可能是一个问题state_machine
,它需要 ActiveRecord::Base 的子类吗?我没有得到什么?我对关注的概念很陌生。