Ich arbeite auf Event-Maschine (Übergänge gem) in Schienen 4.2, schrieb ich eine Methode mit dem Namen send_data
und wenn Status von ausstehend zu liefern geändert wird, wird die send_data
ausgelöst.Wie Fehler in Event Machine mit Übergängen Gem auf Schienen umgehen?
def send_data
data = { 'remote_id' => order.remote_id,
'items' => order.line_items
}
SendLineItemsToWebshop.call(data)
end
SendLineItemsToWebshop
ist eine andere Klasse, die für einige Antwort call
Verfahren und wartenden Anrufe, wenn Reaktion kommen, dann wird Ereignis ausgelöst werden (Zustand geändert werden wird), ansonsten Zustand gleich sein wird.
require 'bunny'
require 'thread'
class SendLineItemsToWebshop
def self.call(data)
conn = Bunny.new(automatically_recover: false)
conn.start
channel = conn.create_channel
response = call_client(channel, data)
channel.queue(ENV['BLISS_RPC_QUEUE_NAME']).pop
channel.close
conn.close
self.response(response)
end
def self.call_client(channel, data)
client = RpcClient.new(channel, ENV['BLISS_RPC_QUEUE_NAME'])
client.call(data)
end
def self.response(response)
return response
JSON.parse response
end
end
Aber Problem ist, dass, wenn ein Ereignis deliver
genannt wird, ist es nicht send_data
‚s Antwort überprüfen kommt oder nicht, ändert er den Staat. Hier ist mir liefern Veranstaltung:
event :deliver do
transitions :to => :delivered, :from => [:editing, :pending] , on_transition: [ :send_data ]
end
Aber ich möchte, dass, wenn Antwort falsch oder gleich Null ist, Übergangszustand wird nicht verändert. Der Zustand wird nur geändert, wenn die Antwort wahr wird. Bitte helfen Sie mir zu diesem Problem.
Dank @MIKE K, es funktioniert. –