У меня есть схема DBIC, где все классы используют общий базовый класс и класс определения. Базовый класс загружает общие компоненты и переопределяет метод обновления для записи наборов изменений в таблице аудита. Класс определения - это статический класс, созданный из базы данных. Заголовок типичного класса выглядит примерно так:Почему DBIx :: Class с множественным наследованием терпят неудачу при обновлении?
package Schema::Base;
use base 'DBIx::Class::Core';
sub update {
my $self = shift;
# track changes to row
my $instance = $self->next::method(@_);
# save changeset to audit table
return $instance;
}
package Schema::Immutable::User;
use Moose;
use MooseX::NonMoose;
use namespace::autoclean;
extends 'DBIx::Class:Core';
__PACKAGE__->load_components("InflateColumn::DateTime");
package Schema::Mutable::User
use base ('Schema::Base', 'Schema::Immutable::User');
sub update {
my $self = shift;
# encrypt password
return $self->next::method(@_);
}
Все работало отлично, пока я не добавил и переопределение обновления в классе User. Очевидно, что переопределение в базовом классе и конфликт класса пользователя каким-то образом. Я использую следующий :: метод (@_), чтобы вызвать следующий метод обновления, но он всегда зависает.
Это приложение CGI. Поэтому, когда я нажимаю «save», браузер вращает свои колеса, пока я не удалю бежать, чтобы отменить запрос. На этом этапе мой журнал выбирает резервную копию, и он показывает, что все запросы выполняются правильно и быстро, но он зависает в конце класса User и не прогрессирует, пока я не удаляю escape-код в браузере.
ОБНОВЛЕНИЕ: Это, по-видимому, проблема взаимодействия с катализатором. При запуске сам по себе этот код работает правильно. Однако, когда он выполняется из приложения катализатора, он терпит неудачу.
опечатка в строке 'use base'? (отсутствует цитата) – Ether
Отредактировано для исправления опечатки –