Почему $my_item->save терпит неудачу с Rose::DB::Object?
Я пытаюсь сделать простое добавление данных в таблицу базы данных (PostgreSQL). Сначала я не мог даже получить простой
$my_item = $_item_class->new(...);
работать. Я обнаружил, что поле в моем коде написано не так, как в моем "модельном" коде.
Но сейчас это работает, но когда я пытаюсь:
$my_item->save;
кажется, исключение брошено. Все это происходит в структуре eval {...}, и я хотел бы поймать исключение и посмотреть, что происходит не так, но я не знаю, как это сделать.
Почему что-то вроде "сохранить" терпит неудачу здесь? Я проверил все, и все кажется правильным (конечно!).
И как мне поймать исключение, которое, кажется, выдается?
Спасибо!
1 ответ
Я сам все понял. Это было просто. Я как-то продублировал поле в своем классе, когда сделал его редактирование. Это все. У класса просто было два поля с одинаковыми именами, указанных в хэш-таблице класса, оба с одинаковыми характеристиками. Когда я удалил один из них, код работал.
Что касается моего второго вопроса о том, как поймать исключение, мне пришлось научиться
if ($@) {
.
.
.
}
сразу после моей структуры "eval {...}". Поскольку я новичок в Perl, я этого не понял. Но это было довольно легко понять. Моя проблема заключалась в том, что я работал из некоторого кода в качестве модели для меня, которая не делала этого, но называла конкретные исключения, которые были добавлены в его код "eval {...}". Итак, я подумал, что мне нужно иметь имена исключений, которые могут быть вызваны вызовами Rose::DB::Object, но я не смог найти таких исключений в документации. Когда я узнал об "if ($@) {...}", мне удалось распечатать сообщенное исключение в $ @, и из этого я смог увидеть проблему с повторяющимся полем, о котором я упоминал выше.
Это было все, что было с этим. Теперь все работает нормально.