工作流程或AASM等宝石的最佳实践

flu*_*aas 8 ruby-on-rails aasm ruby-on-rails-3

我想知道你们如何在控制器中使用工作流程或AASM gem,如果你想更新所有属性,还需要工作流程/ AASM回调才能正常启动.

目前,我使用它像这样:

  class ModelController < ApplicationController
    def update
      @model = model.find(params[:id])

      if params[:application]['state'].present?
        if params[:application]['state'] == "published"
          @model.publish!
        end
      end
      if @model.update_attributes(params[:application]); ... end
    end
  end
Run Code Online (Sandbox Code Playgroud)

感觉不对,什么是更好的解决方案?

小智 0

这是一件小事,但如果该东西不存在,则哈希返回 nil,因此您可以删除对 Present 的调用吗?

当然,我知道这不是你要问的。一种替代方法是在模型中放置一个 before 过滤器,并在那里检查状态。这会让你的控制器对你的状态的底层存储视而不见。

顺便说一句,我们在这里使用 AASM,我喜欢它:)