On Wed, Aug 19, 2009 at 9:44 PM, Eden Cardim <[email protected]> wrote:
> On Sun, Aug 16, 2009 at 12:09 PM, Ovid<[email protected]> > wrote: > > Hi all, > > > > This should be painfully obvious, but I don't see it :) > > > > For a personal project, I want users to be able to click on a letter and > get a list of countries starting with that letter. I can do this: > > > > my $letters = $c->model('DB')->storage->dbh->selectcol_arrayref( > > 'select distinct(substr(name,1,1)) as letter from country order by > letter' > > ); > > $c->stash->{letters} = $letters; > > > > > > But the country list is static and I want this available at startup. > 'sub begin' fails because that's called once per request, not once per app. > > > > What's the recommend way of handling this? (I'm using DBIx::Class for > the model) > > package MyApp::Model::DB; > > extends 'Catalyst::Model::DBIC::Schema'; > > has country_letters => (isa => 'ArrayRef', is => 'ro', lazy_build => 1); > > sub _build_country_letters { > my($self) = @_; > return $self->storage->dbh->selectcol_arrayref( > 'select distinct(substr(name,1,1)) as letter from country order by > letter' > ); > }; > > sub BUILD { shift->country_letters } # optionally, force load-time > construction > > # in a distant controller > > $c->stash->{letters} = $c->model('DB')->country_letters; > > -- > Eden Cardim Need help with your Catalyst or DBIx::Class project? > Code Monkey http://www.shadowcat.co.uk/catalyst/ > Shadowcat Systems Ltd. Want a managed development or deployment platform? > http://edenc.vox.com/ http://www.shadowcat.co.uk/servers/ Also FYI it's pretty easy to do something on startup, inside MyApp.pm: sub run { my $c = shift; $c->do_stuff(); $c->SUPER(@_); }
_______________________________________________ List: [email protected] Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/[email protected]/ Dev site: http://dev.catalyst.perl.org/
