| /books/url_create/*/*/* | /books/url_create |
'-------------------------------------+--------------------------------------'
-C<url_create> has disappeared form the "Loaded Path actions" section
+C<url_create> has disappeared from the "Loaded Path actions" section
but it now shows up under the newly created "Loaded Chained actions"
section. And the "/*/*/*" portion clearly shows our requirement for
three arguments.
...
<div id="content">
[%# Status and error messages %]
- <span class="message">[% status_msg || c.request.params.status_msg %]</span>
+ <span class="message">[% status_msg || c.request.params.status_msg | html %]</span>
<span class="error">[% error_msg %]</span>
[%# This is where TT will stick all of your template's contents. -%]
[% content %]
Point your browser to L<http://localhost:3000/books/list> (you should
now be able to safely hit "refresh" in your browser). Then delete the
remaining copy of "TCPIP_Illustrated_Vol-2". The green "Book deleted"
-status message should return.
+status message should return. But notice that you can now hit the
+"Reload" button in your browser and it just redisplays the book
+list (and it correctly shows it without the "Book deleted" message
+on redisplay).
B<NOTE:> Another popular method for maintaining server-side
information across a redirect is to use the C<flash> technique we
each book was added and when each book is updated:
$ sqlite3 myapp.db
- sqlite> ALTER TABLE book ADD created INTEGER;
- sqlite> ALTER TABLE book ADD updated INTEGER;
+ sqlite> ALTER TABLE book ADD created TIMESTAMP;
+ sqlite> ALTER TABLE book ADD updated TIMESTAMP;
sqlite> UPDATE book SET created = DATETIME('NOW'), updated = DATETIME('NOW');
sqlite> SELECT * FROM book;
1|CCSP SNRS Exam Certification Guide|5|2010-02-16 04:15:45|2010-02-16 04:15:45
#
__PACKAGE__->add_columns(
"created",
- { data_type => 'datetime', set_on_create => 1 },
+ { data_type => 'timestamp', set_on_create => 1 },
"updated",
- { data_type => 'datetime', set_on_create => 1, set_on_update => 1 },
+ { data_type => 'timestamp', set_on_create => 1, set_on_update => 1 },
);
This will override the definition for these fields that Schema::Loader
5|Designing with Web Standards|5|2010-02-16 04:15:45|2010-02-16 04:15:45
9|TCP/IP Illustrated, Vol 3|5|2010-02-16 04:15:45|2010-02-16 04:15:45
10|TCPIP_Illustrated_Vol-2|5|2010-02-16 04:18:42|2010-02-16 04:18:42
+ sqlite> .q
Notice in the debug log that the SQL DBIC generated has changed to
incorporate the datetime logic:
http://localhost:3000/books/list_recent/15
Depending on how recently you added books, you might want to
-try a higher or lower value.
+try a higher or lower value for the minutes.
=head2 Chaining ResultSets
always, it must be above the closing "C<1;>"):
#
- # Helper methods
+ # Row-level helper methods
#
sub full_name {
my ($self) = @_;
most recent version of the Catalyst Tutorial can be found at
L<http://dev.catalyst.perl.org/repos/Catalyst/Catalyst-Manual/5.80/trunk/lib/Catalyst/Manual/Tutorial/>.
-Copyright 2006-2008, Kennedy Clark, under Creative Commons License
+Copyright 2006-2010, Kennedy Clark, under Creative Commons License
(L<http://creativecommons.org/licenses/by-sa/3.0/us/>).