An object with the same "email" already existпри том, что мы совешенно уверены, что такой email в базе ровно один - у редактируемого объекта. В чем дело? Если случилось так, что форма редактирования объекта содержит embedded-форму, то скорее всего проблема в следующем.
Как работает валидатор уникальности? Проверяет, есть ли в БД запись с таким значением поля, и id, отличным от id сохраняемого объекта. Если находит, то выдает ошибку валидации - "already exists". А теперь посмотрим внимательно на то, как мы встраиваем одну форму в другую. И наверняка найдем строчки вида
unset($this['id'],$this['user_id']);
Так-так... id удалили? Значит уник-валидатор найдет запись с таким email и id!=null.
Что же делать?
Два варианта.
1. Проверять уникальность только в том случае, если значение поля поменялось (имхо, гемор)
2. Лучше так:
if ($this->isNew()) { unset($embedded_form['id'],$embedded_form['user_id']); }
То есть мы удаляем id только в том случае, если создаем новый объект (это нужно для избежания дублирования записей в БД). Если редактируем имеющийся, то id удалять не нужно, т.к. в это поле подставляется уже сохраненное в БД значение, и связь не нарушится.
Комментариев нет:
Отправить комментарий