我有一個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類更新。顯然有基類中的覆蓋,和用戶類的衝突在某種程度上。我使用next :: method(@_)來調用下一個更新方法,但它總是掛起。
這是一個CGI應用程序。所以當我點擊「保存」瀏覽器旋轉輪子,直到我點擊逃生取消請求。在這一點上,我的日誌記錄選擇了備份,並且它顯示所有查詢都正確執行,並且很快,但是它在User類的最後掛起,並且直到我在瀏覽器中命中轉義纔會繼續。
更新:這似乎是與催化劑相互作用的問題。當自行運行時,此代碼可正常工作。但是,當從催化劑應用程序內執行時,它會失敗。
「use base」行中的排字錯誤? (缺少一個報價) – Ether 2010-09-21 15:07:25
編輯修復錯字 – 2010-09-21 15:20:58