添加验证到rails aasm state

时间:2015-03-02 15:46:49

标签: ruby-on-rails aasm

我过去state_machine中的

state :cancelled do
  validates_presence_of :user
end

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

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

2 个答案:

答案 0 :(得分:6)

我可以提供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

答案 1 :(得分:0)

我正在使用带有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

我以这种方式在完成转换之前运行验证。如果验证失败,转换将永远不会完成。

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