重複したロジックを懸念事項に含めようとしています。複製されたロジックの一部は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
ん。これは、Double にステートマシンがまったく割り当てられなかったことを示しています。concern
NoMethodError: undefined method 'deploy_state' for <DeployableDouble:0xb9831f8>
included do
これを実装するのに実際に正しいコールバックはありますか? state_machine
ActiveRecord::Base などのサブクラスが必要なのでしょうか? 私が得ていない何か?私は懸念の概念にかなり慣れていません。