nehme an, ich habe diese Klasse (direkt von der AASM-Dokumentation entnommen):AASM: die Zustandsmaschine Definition aus der Klassendefinition Trennung
class Job < ActiveRecord::Base
include AASM
aasm do
state :sleeping, :initial => true
state :running
state :cleaning
event :run do
transitions :from => :sleeping, :to => :running
end
event :clean do
transitions :from => :running, :to => :cleaning
end
event :sleep do
transitions :from => [:running, :cleaning], :to => :sleeping
end
end
end
ich viel nicht die Tatsache, dass ich meine Zustandsmaschine haben Definition gemischt mit meiner Klassendefinition (da ich natürlich in einem realen Projekt mehr Methoden zur Jobklasse hinzufügen werde).
Ich möchte den Zustand Maschinendefinition in einem Modul trennen, so dass die Job-Klasse etwas entlang der Linie sein können:
class Job < ActiveRecord::Base
include StateMachines::JobStateMachine
end
ich dann eine job_state_machine.rb Datei in app/models/state_machines erstellt mit einem Gehalt ähnlich wie:
module StateMachines::JobStateMachine
include AASM
aasm do
state :sleeping, :initial => true
state :running
state :cleaning
event :run do
transitions :from => :sleeping, :to => :running
end
event :clean do
transitions :from => :running, :to => :cleaning
end
event :sleep do
transitions :from => [:running, :cleaning], :to => :sleeping
end
end
end
aber dies nicht funktioniert, weil AASM im Modul nicht in der Job-Klasse ... enthalten ist habe ich versucht, auch das Modul an sich ändernde:
module StateMachines::JobStateMachine
def self.included(base)
include AASM
aasm do
state :sleeping, :initial => true
state :running
state :cleaning
event :run do
transitions :from => :sleeping, :to => :running
end
event :clean do
transitions :from => :running, :to => :cleaning
end
event :sleep do
transitions :from => [:running, :cleaning], :to => :sleeping
end
end
end
end
aber immer noch es funktioniert nicht ... jeder Hinweis oder Vorschlag wird sehr geschätzt.
Danke, Ignazio
EDIT:
Dank Alto, die richtige Lösung ist dies:
module StateMachine::JobStateMachine
def self.included(base)
base.send(:include, AASM)
base.send(:aasm, column: 'status') do
....
end
end
end
und natürlich erinnere mich an die Zustandsmaschine Definition enthalten in die Hauptklasse wie folgt:
include StateMachine::JobStateMachine
Danke alto, du legst mich auf den richtigen Weg, ich werde meine Frage entsprechend für jeden ändern, der in Zukunft hierher kommen wird – Gnagno