3

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

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

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

4

2 回答 2

4

State接受a Proc,所以是的,你可以这样做

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

在此处查看更多示例。

于 2019-03-12T15:04:46.127 回答
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来设置不太常见的初始状态。

于 2017-11-01T16:58:25.687 回答