【问题标题】:Adding validations to rails aasm state向 rails aasm 状态添加验证
【发布时间】:2015-03-02 15:46:48
【问题描述】:

state_machine我曾经做过

state :cancelled do
  validates_presence_of :user
end

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

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

【问题讨论】:

    标签: ruby-on-rails aasm


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-18
        • 1970-01-01
        • 1970-01-01
        • 2016-03-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多