Ruby on Rails как вывести сообщение пользователю при валидации удаления записи?

Есть две модели, которые не связаны друг с другом, назовем их model1 и model2. Для обоих моделей нет своих контроллеров, а действия c model1 происходят через accepts_nested_attributes_for еще одной модели model0. Перед удалением записи из model1, необходимо проверить наличие записей в model2 и при наличии записей в model2, запретить удаление записи из model1.

Обычные валидации при удалении не срабатывают. Если вызвать свою валидацию через before_destroy и вернуть в ней false исключение сработает и запись не удалится. Подобное выглядит как ошибка rails и в консоли мы видим ActiveRecord::RecordNotDestroyed (ActiveRecord::RecordNotDestroyed), в связи с чем, сообщение (errors message) до пользователя не доходит.

Мне нужно, при удалении записи из model1 проверить наличие записей в model2 и если они есть, вывести сообщение пользователю и не удалять запись.

смотрел stackoverflow.com/questions/123078/how-do-i-valida... , все варианты отсюда не выводят сообщения, а вариант с def before_destroy... как я понял работает только для связанных моделей и вызывается только при dependent: :destroy. Более адекватных советов не нашел.

Надеюсь написал понятно :)
Спасибо
  • Вопрос задан
  • 589 просмотров
Пригласить эксперта
Ответы на вопрос 1
@thepry
Ruby on rails, 1С разработчик
Перед удалением записи из model1, необходимо проверить наличие записей в model2 и при наличии записей в model2, запретить удаление записи из model1.

has_many :model2s, dependent: :restrict
Возможно это уже добавить error message. Нужно проверить.

Обычные валидации при удалении не срабатывают. Если вызвать свою валидацию через before_destroy и вернуть в ней false исключение сработает и запись не удалится. Подобное выглядит как ошибка rails и в консоли мы видим ActiveRecord::RecordNotDestroyed (ActiveRecord::RecordNotDestroyed), в связи с чем, сообщение (errors message) до пользователя не доходит.

Видимо вы используете destroy!вместоdestroy
Сообщение об ошибках в методе валидации можно добавлять.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы