[html-formfu] Creating & Editing Records in a Related Table

Carl Franks fireartist at gmail.com
Mon Sep 24 13:58:18 GMT 2012


On 24 September 2012 11:22,  <scott at simpzoid.com> wrote:
> Dear All,
>
> I have been the following 2 methods in a controller:
>
> sub create :Chained('base') :PathPart('create')
> :FormConfig('author/edit.conf') {
>         my ( $self, $c ) = @_;
>
>         my $form = $c->stash->{form};
>         $form->stash( schema => $c->stash->{schema} );
>
>         if ( $form->submitted_and_valid ) {
>
>              my $author =
> $form->stash->{schema}->resultset('Author')->new_result({});
>              $form->model->update($author);
>              $c->response->redirect( $c->uri_for( $self->action_for('list')) );
>         }
>         $c->stash(template => 'author/formfu_create.tt2');
> }
>
> sub edit :Chained('object') :PathPart('edit') :Args(0)
>         :FormConfig('author/edit.conf') {
>         my ( $self, $c, $id ) = @_;
>
>         my $form = $c->stash->{form};
>
>         if ( $form->submitted_and_valid ) {
>                 $form->model->update($c->stash->{rs});
>                 $c->response->redirect( $c->uri_for( $self->action_for('list')) );
>         } else {
>                 $form->model->default_values($c->stash->{rs});
>         }
>         $c->stash(template => 'author/formfu_create.tt2');
> }
>
> The methods give the following results:
>
> Edit gives
> SELECT me.id, me.name FROM author me WHERE ( me.id = ? ): '1'
> UPDATE author SET name = ? WHERE ( id = ? ): 'scott', '1'
> SELECT me.id, me.address, me.author_id FROM address me WHERE ( ( me.id = ?
> AND me.author_id = ? ) ): '1', '1'
> UPDATE address SET address = ? WHERE ( id = ? ): '13 thriplee road', '1'
>
> Create Gives
> INSERT INTO author ( name) VALUES ( ? ): 'Marge'
>
> ...and finally the question.  Why does the create method not do an insert
> into the address table and what do I have have to do to persuade the
> create method to do said insert?

I haven't checked the Model::DBIC code, but I suspect it's because the
author row doesn't exist at the time it would be creating the related
rows.

Try adding
    $author->insert;
before your
    $form->model->update($author);

Carl



More information about the HTML-FormFu mailing list