Для любого заданного результата класса MySchema :: Result :: Foo (построено из схемы по умолчанию загрузчика генерируется синтаксиса, который использует Moose/MooseX :: nonmoose)метод Moose модификаторы на DBIx :: Class :: модель схемы в Catalyst
Если добавить метод BUILDARGS обертки для санитарной обработки данных конструктора для строки, как так:
package MySchema::Result::Foo;
use Moose;
use MooseX::NonMoose;
[etc ..]
around 'BUILDARGS' => sub {
my $orig = shift;
my $class = shift;
delete $_[0]->{not_a_real_column};
return $class->$orig(@_);
};
Он работает при использовании схемы непосредственно. Например следующие работы, как и ожидалось: Новый объект строка создается с real_column => «значение» и not_a_real_column удалены прежде -> новый называется
use MySchema;
my $s = MySchema->connect('dbi:blahblahblah');
$s->resultset('Foo')->new({ real_column=>'value', not_a_real_column=>'some other thing' }); #win
Однако, при использовании той же схемы с помощью Catalyst :: Model :: DBIC :: Схема заказа разных. При попытке создать новый объект строки Foo выполняется следующее: not_a_real_column недействителен. Другими словами, аргументы new не запускаются через BUILDARGS до того, как вызывается -> new.
$c->model('MySchemaModel')->resultset('Foo')->new({ real_column=>'value', not_a_real_column=>'some other thing' }); #fails
Интересно, что если я обернуть вокруг «новый» => суб {} вместо вокруг «BUILDARGS» => югу {} поведение является одинаковым в обоих случаях, и работает хорошо, но, к моему пониманию Муз-догма заявляет, что никогда не возится с новым.
Кто-нибудь хочет помочь мне понять, почему это так, или если есть лучший способ?