在Rails API控制器中使用AASM的最佳实践

时间:2017-01-03 23:11:31

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 aasm

我们在Rails应用程序中使用acts_as_state_machine (AASM)来控制传统有限状态机中模型从一个状态到下一个状态的流动。我们正在为我们的应用程序构建一个API,作为其中的一部分,我们希望能够在根据传递给update Controller方法的状态更新Rails模型时触发状态转换由API用户。

状态机的简化版本如下所示:

aasm :column => :state do
    state :proposed, :initial => true
    state :published
    state :retired

    event :publish do
      transitions :from => :proposed, :to => :published
    end

    event :retire do
      transitions :from => :published, :to => :retired
    end
end

一种选择是使用远程过程调用(RPC)样式,我们提供/model/{ID}/publish/model/{ID}/retire样式端点。这是相当直接的,但并不是非常RESTful。

我们考虑的另一个选项是检查参数并根据模型的传入state属性进行转换。这感觉就像一个更好的"方法是我们的​​API对于消费者来说更简单,但它在逻辑方面给控制器增加了很多复杂性。

实现触发Rails API的AASM状态事件的最佳方法是什么?我们错过了一个选择吗?

1 个答案:

答案 0 :(得分:1)

个人而言,我倾向于有两种调用 - 直接类REST调用和状态转换,最常见的是启用?我会使用最不起眼的东西而不用担心它是非RESTful esp因为我发现状态转换可以有一组不同的逻辑。换句话说就是RPC风格的