处理 Rails 中的多个状态

Handling multiple states in Rails

目前,我试图找出在我的 Rails 应用程序中处理状态的最佳方式。

我有一个模型 (Draws),可以在三个维度上处理多个状态。

我需要处理五种状态:

有人可以为我指明有关使用宝石或阅读文章的正确方向,以了解有关如何处理 Rails 中的状态的更多信息吗? 这是将不同属性组合到状态的正确方法吗? 我是否必须分别定义每个转换?

我通常不合并 gem 来处理状态机,因为我通常必须微调通常超出 gem 功能的访问和转换。相反,我只是在哈希中定义我需要的状态机的所有内容,然后在模型中创建方法来处理定义。

   class Draw
      STATES = {
        inactive: {
          label: "Inactive",
          transition: ->(draw) {
            # code here that handles the transition to inactive state
          }
          from: [:started, :running, :ended],
          guard: ->(draw) {
            # code here that indicates that this state can be transitioned 
into
            !self.running? 
          }
        }
        started: {
          # as above
        }
      }

      STATES.keys.each do |s|
        define_method "#{s}?" do
          self.state == s.to_s
        end
      end
    end