Что вам нужно, это что-то вроде:
validate :credits_present
private
def credits_present
unless credits.any?{|c| !c.marked_for_destruction? }
errors.add_to_base "You must provide at least one credit"
end
end
Условие в credits_present
может быть немного грязным, поэтому позвольте мне разбить его на случай, если вы не будете следовать. Метод any?
возвращает true
, если какой-либо из элементов в Enumerable
отвечает true на указанный блок. В этом случае мы проверяем, что элемент не будет удален. Итак, если какой-либо из кредитов не будет удален, мы получим true
. Если true
, мы в хорошей форме, у нас есть хотя бы один кредит, который не будет удален. Если, с другой стороны, мы получим false
, мы либо узнаем, что кредиты отсутствуют, либо имеющиеся, будут удалены. В этом случае проверка не пройдена, и мы добавляем ошибку.