在state_machine我曾经做过
state :cancelled do
validates_presence_of :user
end
如果用户不存在,它将自动取消转换。
我们如何为aasm中的特定状态添加类似的验证?
在state_machine我曾经做过
state :cancelled do
validates_presence_of :user
end
如果用户不存在,它将自动取消转换。
我们如何为aasm中的特定状态添加类似的验证?
我可以提供 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
我正在使用带有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
我这样验证在转换完成之前运行。如果验证失败,则转换永远不会完成。
我希望它对面临同样需求的人有用。