Как проверить поле в Rails, Active: Model :: Validator - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь написать валидатор, который обновит цену книги, только если статус продажи неактивен.

# frozen_string_literal: true

class BookPriceValidator < ActiveModel::Validator
  def validate(record)

    record.errors[:price] << "can't change price on book" if record.selling == "active"
  end
end

Проблема, с которой я сталкиваюсь сейчас, заключается в том, что ошибка вызывается, даже если цена книги не обновляется. Как я могу вызвать эту ошибку, только если поле: price действительно изменилось?

1 Ответ

1 голос
/ 30 января 2020

Вы можете изменить условие на

if record.price_changed? && record.selling == "active"` 

ActiveModel :: Dirty отслеживает несостоявшиеся изменения, внесенные в объект ActiveRecord, и добавляет удобные методы для каждого атрибута как [attribute_name]_changed?. Поэтому все, что вам нужно сделать, это проверить, изменилась ли цена вместе с вашим текущим состоянием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...