Почему $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 ($@) {...}", мне удалось распечатать сообщенное исключение в $ @, и из этого я смог увидеть проблему с повторяющимся полем, о котором я упоминал выше.

Это было все, что было с этим. Теперь все работает нормально.

Другие вопросы по тегам