Wie der Titel sagt, verwende ich den Automaten der Statusmaschine, um mehrere Namespaced-State-Maschinen in einem Modell zu erstellen. Wenn eine meiner Statemachines in einen bestimmten Zustand übergeht, versuche ich einen Callback zu verwenden, um ein Ereignis in einer separaten Zustandsmaschine desselben Modells auszulösen, bekomme aber einen Fehler.Rails und der state_machine gem. Verwenden von Callbacks in Namespaced-State-Computern zum Auslösen von Ereignissen in anderen Computern
https://github.com/pluginaweek/state_machine
Dies ist, was ich rufe:
project.status.complete_first
Und das ist der Fehler Ich erhalte:
NoMethodError: undefined method `start_the_second_state_machine' for #<StateMachines::Machine:0x007f9467974b60>
Dies ist eine vereinfachte Version meiner Code:
class Status < ActiveRecord::Base
belongs_to :project
######### First Machine #########
state_machine :first_machine, initial: :first_pending, :namespace => 'first' do
after_transition any => :finished do |transition|
self.start_the_second_state_machine
end
event :complete do
transition first_pending: :finished
end
end
######### Second Machine #########
state_machine :second_machine, initial: :unstarted, :namespace => 'second' do
event :start_the_second_state_machine do
transition unstarted: :started
end
end
end
Wenn ich die Zeile entferne, gibt es keine Fehler und meine Objektübergänge first_machine, aber das Ereignis muss auch auf meiner second_machine aufgerufen werden. Also, ich weiß, das Problem ist mit self
und das ist nicht mein Statusobjekt, aber ich bin mir nicht sicher, wie man darauf zugreifen?
Das funktionierte, danke! Ich hatte ein anderes Problem mit der Namensgebung, dass ich auch reparieren musste. – alexandraleigh