Прежде чем переходить объект из «не в списке» в «в списке», мне нужно проверить, есть ли у максимального числа объектов состояние «в списке». Эта часть отлично работает. Проблема в том, что когда объект редактируется и на него вызывается 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