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

scott at simpzoid.com scott at simpzoid.com
Mon Sep 24 10:22:49 GMT 2012


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?

In case it helps the object and based methods are:

sub base :Chained('/') :PathPart('author') :CaptureArgs(0) {
    my ($self, $c) = @_;
    my $someclass = $c->model('DB_APPLICATION');
    my $schema = $someclass->connect(
        'dbi:mysql:'.$c->session->{username},
        $c->session->{username},
        $c->session->{password},
        { AutoCommit => 1 },
    );
    $c->stash(schema => $schema);

}

sub object :Chained('base') :PathPart('id') :CaptureArgs(1) {
    my ($self, $c, $id) = @_;

    # Find the period record and store it in the stash
    $c->stash(rs => $c->stash->{schema}->resultset('Author')->find($id));

}

Thanks.





More information about the HTML-FormFu mailing list