Я пытаюсь сделать это
has_many :roles, :before_add => :enforce_unique
def enforce_unique(assoc)
false if exists? assoc
end
Из документов: «Если обратный вызов before_add вызывает исключение, объект не добавляется в коллекцию». Использование false выше не препятствует добавлению, поэтому я вынужден сделать это:
def enforce_unique(assoc)
raise if exists? assoc
end
Таким образом, это правда, что он не добавляется, но он также вызывает исключение, которое должно быть обработано. Не очень полезно для меня здесь. Я бы предпочел, чтобы это больше походило на обычный обратный вызов AR before_save, где возврат FALSE также предотвращает сохранение (или добавление), но не вызывает исключение.
В этом случае выше, я бы предпочел, чтобы это просто не добавлялось ассоциированным молча. Есть ли способ сделать это? Я что-то пропустил? Или здесь исключение является единственным вариантом?