<div dir="ltr">Good morning Martin<br><div><br>I wrote this Saturday night, it uses Moose as both HTML::FormHandler and Catalyst do... as long as result_source<span class="gmail-pl-k">-></span>columns_info gives you what I think, it should work... beware I only wrote on quick test :)<br><div class="gmail_extra"><br><a href="https://github.com/ThisUsedToBeAnEmail/HTML-FormHandler-Role-Default/blob/master/lib/HTML/FormHandler/Role/Default.pm">https://github.com/ThisUsedToBeAnEmail/HTML-FormHandler-Role-Default/blob/master/lib/HTML/FormHandler/Role/Default.pm</a><br><br></div><div class="gmail_extra">If you're adamant on having this logic in your schema I would looking into just writing a new_with_defaults method where you just loop through the Results column info build a hash and then return new_result(%defaults).<br><br></div><div class="gmail_extra">Regards,<br><br></div><div class="gmail_extra">Robert. <br></div><div class="gmail_extra"> <br></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Dec 11, 2016 at 7:37 PM, Martin Řehák <span dir="ltr"><<a href="mailto:rehak@tekkirk.org" target="_blank">rehak@tekkirk.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi,<br>
<br>
thank you for kickstarting me. I still don't understand there is no such method<br>
provided by DBIx already I have resolved the issue with this diff:<br>
<br>
diff -r d65de14e366f lib/reha/Controller/Lesson.pm<br>
--- a/lib/reha/Controller/Lesson.<wbr>pm Sat Dec 10 17:22:07 2016 +0100<br>
+++ b/lib/reha/Controller/Lesson.<wbr>pm Sun Dec 11 19:35:28 2016 +0100<br>
@@ -54,17 +54,9 @@<br>
<span class="gmail-"> my ($self, $c, $lesson_id) = @_;<br>
</span> my ($validated);<br>
<br>
- my $init_row = $c->model('DB::Lesson')->new_<wbr>result({});<br>
+ my $row = $c->model('DB::Lesson')->find_<wbr>or_default({id => $lesson_id});<br>
<span class="gmail-"> $validated = $self->formDetail->process(<br>
</span>- item => $init_row,<br>
+ item => $row,<br>
<span class="gmail-"> params => $c->req->parameters);<br>
<br>
if ($validated) {<br>
</span>diff -r d65de14e366f lib/reha/Schema.pm<br>
--- a/lib/reha/Schema.pm Sat Dec 10 17:22:07 2016 +0100<br>
+++ b/lib/reha/Schema.pm Sun Dec 11 19:35:28 2016 +0100<br>
@@ -8,7 +8,9 @@<br>
use MooseX::MarkAsMethods autoclean => 1;<br>
extends 'DBIx::Class::Schema';<br>
<br>
-__PACKAGE__->load_namespaces;<br>
+__PACKAGE__->load_namespaces(<br>
+ default_resultset_class => '+reha::Schema::ResultSet::<wbr>Base',<br>
+ resultset_namespace => 'Base');<br>
<br>
<br>
# Created by DBIx::Class::Schema::Loader v0.07043 @ 2016-02-05 16:52:32<br>
diff -r d65de14e366f lib/reha/Schema/ResultSet/<wbr>Base.pm<br>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000<br>
+++ b/lib/reha/Schema/ResultSet/<wbr>Base.pm Sun Dec 11 19:35:28 2016 +0100<br>
@@ -0,0 +1,28 @@<br>
+package reha::Schema::ResultSet::Base;<br>
+<br>
+use strict;<br>
+use warnings;<br>
+<br>
+use base 'DBIx::Class::ResultSet';<br>
+<br>
+sub find_or_default {<br>
+ my $self = shift;<br>
+ my $attrs = (@_ > 1 && ref $_[$#_] eq 'HASH' ? pop(@_) : {});<br>
+ my $hash = ref $_[0] eq 'HASH' ? shift : {@_};<br>
+ my $row;<br>
+<br>
+ # return data if found<br>
+ if (keys %$hash and $row = $self->find($hash, $attrs) ) {<br>
+ return $row;<br>
+ }<br>
+<br>
+ # return new result with defaults prefilled<br>
+ $row = $self->new_result($hash);<br>
+ foreach my $col ($row->result_source->columns) {<br>
+ my $default = $row->result_source->column_<wbr>info($col)->{default_value};<br>
+ $row->$col($default) if($default && !defined $row->$col());<br>
+ }<br>
+ return $row;<br>
+}<br>
+<br>
+1;<br>
<br>
Thank you very much all for patience with my issue.<br>
<br>
Regards<br>
<span class="gmail-HOEnZb"><font color="#888888">--<br>
Martin<br>
</font></span><div class="gmail-HOEnZb"><div class="gmail-h5"><br>
On <a href="tel:2016.12.10%2018" value="+12016121018">2016.12.10 18</a>:00:05 +0100, LNATION . wrote:<br>
> Sorry Long day :) corrected sentence...<br>
><br>
> The problem is because when you call ->new_result the default_value does<br>
> not get set, which is reasonable behavior the moment you are dealing with<br>
> time. I am unsure whether there is another create method which uses<br>
> database or even the schema column spec.<br>
><br>
> Regards<br>
><br>
> Robert<br>
><br>
> On Sat, Dec 10, 2016 at 5:48 PM, LNATION . <<a href="mailto:thisusedtobeanemail@gmail.com">thisusedtobeanemail@gmail.com</a><wbr>><br>
> wrote:<br>
><br>
> > The problem I think is when you call >new_result the default value from<br>
> > your database does get **populated that happens when on insert....<br>
> ><br>
> > On Sat, Dec 10, 2016 at 5:17 PM, Martin Řehák <<a href="mailto:rehak@tekkirk.org">rehak@tekkirk.org</a>> wrote:<br>
> ><br>
> >> Hi,<br>
> >><br>
> >> I understand that there is a complicated solution. I am looking for<br>
> >> the simplest way.<br>
> >><br>
> >> Doc says:<br>
> >><br>
> >> <snip><br>
> >> For forms where you pass in an 'item' (usually a database row object),<br>
> >> the values in that object will be used preferentially; if an accessor<br>
> >> exists in the 'item' object, then the defaults won't be used. (If an<br>
> >> accessor doesn't exist, the defaults *will* be used.)<br>
> >><br>
> >> $form->process( item => $row, params => {} );<br>
> >><br>
> >> For the above call the 'default' on the field will not be used, which is<br>
> >> usually what you want.<br>
> >> </snip><br>
> >><br>
> >> What is the easiest way how to get defaults going from the database<br>
> >> schema into a form, please? Is process() function able to propagate<br>
> >> defaults from $row into $form? How to achieve that?<br>
> >><br>
> >> Regards<br>
> >> --<br>
> >> Martin<br>
> >><br>
> >> On <a href="tel:2016.12.10%2016" value="+12016121016">2016.12.10 16</a>:51:52 +0100, LNATION . wrote:<br>
> >> > My email coding has some syntax errors, apologies.<br>
> >> ><br>
> >> > On Sat, Dec 10, 2016 at 4:50 PM, LNATION . <<br>
> >> <a href="mailto:thisusedtobeanemail@gmail.com">thisusedtobeanemail@gmail.com</a>><br>
> >> > wrote:<br>
> >> ><br>
> >> > > and then make a role role<br>
> >> > ><br>
> >> > > has default_column_spec => ( ...)<br>
> >> > ><br>
> >> > > before render => sub {<br>
> >> > > while (my ($field, $default) = each %{<br>
> >> $_[0]->default_column_spec}{<br>
> >> > > unless ($_[0]->field($filed)->value) { # mayb editing<br>
> >> > > $_[0]->field('$field)->value($<wbr>default);<br>
> >> > > }<br>
> >> > > }<br>
> >> > > }<br>
> >> > ><br>
> >> > ><br>
> >> > > On Sat, Dec 10, 2016 at 4:41 PM, LNATION . <<br>
> >> <a href="mailto:thisusedtobeanemail@gmail.com">thisusedtobeanemail@gmail.com</a>><br>
> >> > > wrote:<br>
> >> > ><br>
> >> > >> maybe something like ......<br>
> >> > >><br>
> >> > >> my $columns = $result->result_source-><wbr>columns_info;<br>
> >> > >> my %default_form_spec;<br>
> >> > >> for my $name (keys %{$columns}){<br>
> >> > >> if (my $default = $columns->{$name}->{default_<wbr>value}) {<br>
> >> > >> $default_form_spec{ $name } = $default;<br>
> >> > >> }<br>
> >> > >> }<br>
> >> > >><br>
> >> > >><br>
> >> > >><br>
> >> > ><br>
> >><br>
> >> > ______________________________<wbr>_________________<br>
> >> > List: <a href="mailto:Catalyst@lists.scsys.co.uk">Catalyst@lists.scsys.co.uk</a><br>
> >> > Listinfo: <a href="http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst" rel="noreferrer" target="_blank">http://lists.scsys.co.uk/cgi-<wbr>bin/mailman/listinfo/catalyst</a><br>
> >> > Searchable archive: <a href="http://www.mail-archive.com/ca" rel="noreferrer" target="_blank">http://www.mail-archive.com/ca</a><br>
> >> <a href="http://talyst@lists.scsys.co.uk/" rel="noreferrer" target="_blank">talyst@lists.scsys.co.uk/</a><br>
> >> > Dev site: <a href="http://dev.catalyst.perl.org/" rel="noreferrer" target="_blank">http://dev.catalyst.perl.org/</a><br>
> >><br>
> >><br>
> >> ______________________________<wbr>_________________<br>
> >> List: <a href="mailto:Catalyst@lists.scsys.co.uk">Catalyst@lists.scsys.co.uk</a><br>
> >> Listinfo: <a href="http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst" rel="noreferrer" target="_blank">http://lists.scsys.co.uk/cgi-<wbr>bin/mailman/listinfo/catalyst</a><br>
> >> Searchable archive: <a href="http://www.mail-archive.com/ca" rel="noreferrer" target="_blank">http://www.mail-archive.com/ca</a><br>
> >> <a href="http://talyst@lists.scsys.co.uk/" rel="noreferrer" target="_blank">talyst@lists.scsys.co.uk/</a><br>
> >> Dev site: <a href="http://dev.catalyst.perl.org/" rel="noreferrer" target="_blank">http://dev.catalyst.perl.org/</a><br>
> >><br>
> ><br>
> ><br>
<br>
> ______________________________<wbr>_________________<br>
> List: <a href="mailto:Catalyst@lists.scsys.co.uk">Catalyst@lists.scsys.co.uk</a><br>
> Listinfo: <a href="http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst" rel="noreferrer" target="_blank">http://lists.scsys.co.uk/cgi-<wbr>bin/mailman/listinfo/catalyst</a><br>
> Searchable archive: <a href="http://www.mail-archive.com/catalyst@lists.scsys.co.uk/" rel="noreferrer" target="_blank">http://www.mail-archive.com/<wbr>catalyst@lists.scsys.co.uk/</a><br>
> Dev site: <a href="http://dev.catalyst.perl.org/" rel="noreferrer" target="_blank">http://dev.catalyst.perl.org/</a><br>
<br>
<br>
______________________________<wbr>_________________<br>
List: <a href="mailto:Catalyst@lists.scsys.co.uk">Catalyst@lists.scsys.co.uk</a><br>
Listinfo: <a href="http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst" rel="noreferrer" target="_blank">http://lists.scsys.co.uk/cgi-<wbr>bin/mailman/listinfo/catalyst</a><br>
Searchable archive: <a href="http://www.mail-archive.com/catalyst@lists.scsys.co.uk/" rel="noreferrer" target="_blank">http://www.mail-archive.com/<wbr>catalyst@lists.scsys.co.uk/</a><br>
Dev site: <a href="http://dev.catalyst.perl.org/" rel="noreferrer" target="_blank">http://dev.catalyst.perl.org/</a><br>
</div></div></blockquote></div><br></div></div></div>