Как убрать валидацию модели из веселья

Я борюсь с этой проблемой более 6 часов.

Я хочу удалить проверку из Spree::Order

module Spree
  class Order < Spree::Base
    MONEY_THRESHOLD  = 100_000_000
    MONEY_VALIDATION = {
      presence:     true,
      numericality: {
        greater_than: -MONEY_THRESHOLD,
        less_than:     MONEY_THRESHOLD,
        allow_blank:   true
      },
      format:       { with: /\A-?\d+(?:\.\d{1,2})?\z/, allow_blank: true }
    }.freeze

    NEGATIVE_MONEY_VALIDATION = MONEY_VALIDATION.deep_dup.tap do |validation|
      validation.fetch(:numericality)[:less_than_or_equal_to] = 0
    end.freeze

    validates :promo_total,          NEGATIVE_MONEY_VALIDATION

    # ...
  end
end

Это мой декоратор

Spree::Order.class_eval do
  # This is not working
  _validators.delete(:promo_total)

  # Nope
  _validators.reject!{ |key, _| key == :promo_total }

  # Nope
  def validate
    errors = self.errors.map {|attr, message| [attr, message]}
    self.errors.clear
    errors.each do |attr, message|
      self.errors.add(attr, message) unless attr == "promo_total"
    end
  end
  # ...
end

Когда я проверяю подтверждение, я получаю сообщение об ошибке :promo_total

self.valid?
#=> false

self.errors.messages
#=> {:promo_total=>["must be less than or equal to 0"]}

1 ответ

Вы должны попробовать с этим драгоценным камнем https://github.com/workarea-commerce/active_model-unvalidate

Даже в последней версии должно работать

Другие вопросы по тегам