Проверка корректности Rails только при изменении значения поля c - PullRequest
0 голосов
/ 11 февраля 2020

Я написал пользовательскую функцию проверки в модели рельсов. Я хочу убедиться, что валидация изменена только в поле (в моем примере поле «activestatus» изменено с «активного» на «неактивное»). Как это сделать?

class Normaluser < ApplicationRecord
   validate :check_on_update, :on => :update
   validate :check_on_status_change :"***what to write here?***"
   private

   def check_on_update
    if is_cyclic?
        puts "hierarchy is cyclic"
        errors.add(:pid,'it is cyclic')

    elsif(get_height(id)+getDepth>=2)
        puts "height limit exceeded"
        errors.add(:pid,'height limit exceeded')
    elsif count_children>=4
        errors.add(:pid,'children limit exceeded')
    end
    puts "all is fine at update"
end 

Ответы [ 2 ]

2 голосов
/ 11 февраля 2020

Посмотрите на ActiveModel::Dirty. Чтобы запустить проверку только при изменении activestatus с active на inactive, просто добавьте строку в пользовательский метод проверки:

def check_on_update
  return unless activestatus_changed?(from: 'active', to: 'inactive')

  # your validation code
end
0 голосов
/ 11 февраля 2020

Вы можете использовать ActiveModel :: Dirty

if activestatus_was == 'active' && activestatus == 'inactive'
  # validation logic goes here
end

Дополнительная информация: https://api.rubyonrails.org/classes/ActiveModel/Dirty.html

Надеюсь, это поможет!

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