使用aasm gem动态设置初始状态

问题描述 投票:2回答:2

我有一个ActiveRecord模型。我想在初始化时根据其属性设置初始状态。这是我的条件:

self.expected_delivery_date.blank? ? :in_preparation : :waiting

有没有办法做到这一点?这是个坏主意吗?

ruby-on-rails-5 rails-activerecord state-machine aasm
2个回答
2
投票

您可以定义一个aasm钩子方法并在那里设置状态:

class User < ActiveRecord::Base
  include AASM
  aasm do
    state :submitted, initial: true
    state :started
  end
  def aasm_ensure_initial_state
    self.aasm_state = :started
  end
end

这对我来说似乎很合理;你可以给出最常见的初始状态initial: true选项,然后在aasm_ensure_initial_state中使用逻辑来设置不太常见的初始状态。


1
投票

状态accepts a Proc,所以是的,你可以做到这一点

initial_state lambda { |your_model|
    your_model.expected_delivery_date.blank? ? :in_preparation : :waiting
}

查看更多here的例子。

© www.soinside.com 2019 - 2024. All rights reserved.