我正在使用rails 4.2中的事件机器(过渡gem),我编写了一个名为send_data
的方法,当状态从挂起更改为交付时,send_data
将被触发。
def send_data
data = { 'remote_id' => order.remote_id,
'items' => order.line_items
}
SendLineItemsToWebshop.call(data)
end
SendLineItemsToWebshop
是另一个调用call
方法并等待某些响应的类,如果响应来了,那么事件将被触发(状态将被更改),否则,状态将是相同的。< / p>
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
但问题是,当调用事件deliver
时,它不检查send_data
的响应是否到来,它会改变状态。这是我提供的活动:
event :deliver do
transitions :to => :delivered, :from => [:editing, :pending] , on_transition: [ :send_data ]
end
但我希望如果响应为false或nil,则不会更改转换状态。只有在回应成真时才会改变国家。 请帮我解决这个问题。
答案 0 :(得分:1)
Transitions gem有一个很好的<% if !current_user %>
<%= link_to 'Register', new_user_registration_path %>
<% end %>
功能。添加一个简单的逻辑测试,如guard
,然后尝试:
can_be_delivered?