Ruby on rails 使用两个状态机的拆分ActiveRecord模型

Ruby on rails 使用两个状态机的拆分ActiveRecord模型,ruby-on-rails,activerecord,encapsulation,state-machine,Ruby On Rails,Activerecord,Encapsulation,State Machine,我有一个模型使用两个 其中,xxx/yyy可以是MyModel实例或包装类中的方法。我不知道 问题是:做这件事的最佳方法是什么?简短回答:将状态机作为一个模块进行分解 更长的版本:你可以看看,海报回答了同样的问题 希望这有帮助 class MyModel < ActiveRecord::Base state_machine :call_state, :initial => :pending do event :start do transition :pe

我有一个模型使用两个

其中,
xxx
/
yyy
可以是
MyModel
实例或包装类中的方法。我不知道

问题是:做这件事的最佳方法是什么?

简短回答:将状态机作为一个模块进行分解

更长的版本:你可以看看,海报回答了同样的问题

希望这有帮助

class MyModel < ActiveRecord::Base

  state_machine :call_state, :initial => :pending do
    event :start do
      transition :pending => :started
    end

    event :restart do
      transition :started => :pending
    end

    event :finish do
      transition :started => :finished
    end
  end

  state_machine :payment_state, :initial => :unpaid  do
    event :pay do
      transition :unpaid => :paid
    end

    event :pay_back do
      transition :paid => :paid_back
    end

    event :reject_payment do
      transition :unpaid => :rejected
    end
  end

  #tons of methods related with call_state
  #tons of methods related with payment_state
end
def can_call?
  xxx.paid? and yyy.can_start?
end