]> git.decadent.org.uk Git - maypole.git/commitdiff
This *really* ought to be a recipe.
authorSimon Cozens <simon@simon-cozens.org>
Fri, 16 Apr 2004 13:03:55 +0000 (13:03 +0000)
committerSimon Cozens <simon@simon-cozens.org>
Fri, 16 Apr 2004 13:03:55 +0000 (13:03 +0000)
git-svn-id: http://svn.maypole.perl.org/Maypole/trunk@137 48953598-375a-da11-a14b-00016c27c3ee

doc/Request.pod

index fc51d1ba854ea87900250ce5a6f90d83bf96e602..1782cd5df5b23c5b1c5600aade6e0e0e8d8fabfb 100644 (file)
@@ -17,6 +17,38 @@ These hacks deal with changing the way Maypole relates to the outside world;
 alternate front-ends to the Apache and CGI interfaces, or subclassing chunks
 of the front-end modules to alter Maypole's behaviour in particular ways.
 
+=head3 Separate model class modules
+
+You want to put all the C<BeerDB::Beer> routines in a separate module,
+so you say:
+
+    package BeerDB::Beer;
+    BeerDB::Beer->has_a(brewery => "BeerDB::Brewery");
+    sub foo :Exported {}
+
+And in F<BeerDB.pm>, you put:
+
+    use BeerDB::Beer;
+
+It doesn't work.
+
+B<Solution>: It doesn't work because of the timing of the module
+loading. C<use Beer::Beer> will try to set up the C<has_a> relationships
+at compile time, when the database tables haven't even been set up,
+since they're set up by
+
+    BeerDB->setup("...")
+
+which does its stuff at runtime. There are two ways around this; you can
+either move the C<setup> call to compile time, like so:
+
+    BEGIN { BeerDB->setup("...") }
+
+or move the module loading to run-time (my preferred solution):
+
+    BeerDB->setup("...");
+    BeerDB::Beer->require;
+
 =head3 Debugging with the command line
 
 You're seeing bizarre problems with Maypole output, and you want to test it in