Проверка на переход состояния, а не на сохранение - PullRequest
0 голосов
/ 24 октября 2019

Прежде чем переходить объект из «не в списке» в «в списке», мне нужно проверить, есть ли у максимального числа объектов состояние «в списке». Эта часть отлично работает. Проблема в том, что когда объект редактируется и на него вызывается save, он выдает ту же ошибку. Так как мне проверить только при переходе, а не при сохранении?

Это мой код:

event :list do
  transition [:listed, :unlisted, :blocked] => :listed
end

before_transition :to => :listed, :do => :max_number_of_listed_products

def max_number_of_listed_products
    max_listed_products = 5
    num_listed_products = 5
    if num_listed_products >= max_listed_products
      errors.add("This is an error")
      return false
    end
end

, с которым я ранее пытался:

state :listed do
  validate :max_number_of_listed_products
end

иудаляя оператор return false из max_number_of_listed_products, но я подумал, что, может быть, в этом проблема, потому что это происходит в любом случае, когда состояние «указано».

ETA: Это работает, но, конечно, есть лучший способ?

before_transition :from => [:unlisted, :blocked], :to => :listed, :do => :max_number_of_listed_products
...