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