带有外部api调用的条件state_machine转换

时间:2014-02-10 18:29:33

标签: ruby ruby-on-rails-3 state-machine

我想知道设置它的最佳方法是什么。将state_machine gem用于ruby。

基本上我有一个状态机转换,它以外部API调用为条件。类似的东西:

state_machine initial: :start do
  event :move do
    transition :start => :second, if: :external_is_cool_with_it?
    transition :start => same
  end
end

这很好用,好像外部api返回true,它会转到:second,否则它会失败,进入下一个转换,它保持相同的状态。假设API调用发送了一封电子邮件。

唯一的问题是我不能问:

instance.can_move?

因为它实际上会运行if,它调用外部API等......所以当我做类似的事情时:

instance.move! if instance.can_move?

if instance.can_move?
  puts "Moveable"
  # Form to allow state_event
end

它会调用外部API两次(发送两次电子邮件)。

所以我不认为if的使用在这种情况下是正确的,但我也不能真正使用before/after_transition,因为我需要它有条件地移动到下一个转换,如果外部呼叫失败。

有什么建议吗?

0 个答案:

没有答案