Ruby on rails 5 使用aasm gem动态设置初始状态

Ruby on rails 5 使用aasm gem动态设置初始状态,ruby-on-rails-5,rails-activerecord,state-machine,aasm,Ruby On Rails 5,Rails Activerecord,State Machine,Aasm,我有一个ActiveRecord模型。我想根据初始化时的属性设置初始状态。以下是我的情况: self.expected_delivery_date.blank? ? :in_preparation : :waiting 有办法吗?这是个坏主意吗?您可以定义一个aasm钩子方法并在那里设置状态: class User < ActiveRecord::Base include AASM aasm do state :submitted, initial: true s

我有一个ActiveRecord模型。我想根据初始化时的属性设置初始状态。以下是我的情况:

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

有办法吗?这是个坏主意吗?

您可以定义一个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
class用户
这对我来说似乎是合理的;您可以为最常见的初始状态指定
initial:true
选项,然后使用
aasm\u sure\u initial\u state
中的逻辑来设置不太常见的初始状态。

状态a
Proc
,因此,是的,您可以这样做

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

请参阅更多示例。

如果不在创建后的
中使用它,您将如何使用
aasm\u确保初始状态