7

state_machine我曾经做过

state :cancelled do
  validates_presence_of :user
end

如果用户不存在,它将自动取消转换。

我们如何为aasm中的特定状态添加类似的验证?

4

2 回答 2

7

我可以提供 2 个选项:

首先:

validates_presence_of :sex, :name, :surname, if: -> { state == 'personal' }

第二

event :fill_personal do
  before do
    instance_eval do
      validates_presence_of :sex, :name, :surname
    end
  end
  transitions from: :empty, to: :personal
end
于 2016-03-26T19:01:53.183 回答
-1

我正在使用带有AASM gem 的 Rails 5 来管理模型状态,并且我在验证应用特定状态时遇到了同样的情况。为了让它按照我想要的方式工作,我所做的是:

class Agreement < ApplicationRecord
    include AASM

    aasm do
        state :active, initial: true
        state :grace
        state :cancelled

        event :grace do
            transitions from: :active, to: :grace
        end

        event :cancel do
            transitions to: :cancelled, if: :can_cancel_agreement?
        end
    end

    private

    def can_cancel_agreement?
        self.created_at.today?
    end
end

我这样验证在转换完成之前运行。如果验证失败,则转换永远不会完成。

我希望它对面临同样需求的人有用。

于 2019-02-02T05:41:45.603 回答