Excellent - that did the trick! Many thanks for your quick help and patience with a noob!
On Tue, Oct 5, 2010 at 4:45 PM, Jesse Luehrs <[email protected]> wrote: > On Tue, Oct 05, 2010 at 04:35:46PM -0700, Alex Aalto wrote: >> Hello all! I'm an old but rusty Perl programmer - and a noob to the >> modern Perl frameworks. I'm inheriting a site that uses Catalyst and >> Kioku but am getting the following error when trying to instantiate an >> object User.pm: >> >> User->register "Attribute (id) is required at >> /home/alex/Desktop/ParkingMobility-Server/script/../support/lib/perl5/MooseX/Aliases/Meta/Trait/Attribute.pm >> line 70 >> >> ...the User.pm object looks like: >> >> package MyProject::Model::User; >> use Moose; >> use namespace::autoclean; >> use MooseX::Aliases; >> use MooseX::Types::Email qw/EmailAddress/; >> >> with qw( >> KiokuX::User >> MyProject::Data::Serialize >> MyProject::Data::ObjectKey >> MyProject::Model::Does::TimeStamp >> KiokuDB::Role::Upgrade::Handlers::Table >> ); >> >> has email => ( >> isa => EmailAddress, >> is => 'ro', >> traits => [qw(Aliased)], >> alias => [qw(id kiokudb_object_id key)], >> required => 1, >> ); >> >> Can someone explain to me why the "id" attribute alias is not being >> picked up? Shouldn't "email" and "id" now be synonymous now that it's >> "Aliased"? I've tried to define an "id" attribute but this results in >> an error telling me that I'm attempting to override the attribute "id" >> (defined in KiokuX::User). > > This isn't quite how MooseX::Aliases works - all it does is give an > attribute an alternate accessor, and make the attribute also look for an > additional name in the constructor. It's not affecting the 'id' > attribute at all, and the 'id' attribute is still required. What you > should be doing here is aliasing in the other direction: > > has '+id' => ( > alias => [qw(email kiokudb_object_id key)], > ); > > This tells the 'id' attribute to also look for its value in the 'email' > argument passed to the constructor, which is what you want. > > -doy > -- powerful programming, clean code t: 604.685.5701 m: 604.809.2585
