Carl Franks wrote: > If it doesn't seem to work - dump $form->params(), so you can see > which params are being accepted.
$form->params() looks correct at all stages. Here is an example: I have a 'Paper' with two 'Authors': Joe Shmo and John Doe. I edit the paper, the form displays both authors and an empty author line. I click my 'Add Author' button to add one more Author Line, then enter 'New Author 1' and 'New Author 2' into the empty Author linues and click 'submit: NOTE: Each Author has a 'rank' field that lets me store the proper ordering for the authors, which I update in my controller to set the correct order. It seems like somewhere along the line Model::DBIC is using the existing has_many data instead of looking at the submitted form data to determine how many 'has_many' items there are to add/update. The variables submitted to Catalyst look like: [debug] Body Parameters are: .-------------------------------------+---------------------------------. | Parameter | Value | +-------------------------------------+---------------------------------+ | abstract | abstract | author_count | 4 | authors.author_id_1 | 1606 | authors.author_id_2 | 1649 | authors.author_id_3 | | authors.author_id_4 | | authors.name_1 | Joe Shmo | authors.name_2 | John Doe | authors.name_3 | New Author 1 | authors.name_4 | New Author 2 | authors.rank_1 | 1 | authors.rank_2 | 2 | authors.rank_3 | | authors.rank_4 | | bibtex_citation | | date | some day | institution | no where | keywords | | paper_id | 645 | submit | Submit | title | fun with create_related '-------------------------------------+--------------------------------------' The DBIC_TRACE=1 for this submission follows. The 'count is' and 'repeating X' lines are 'warn()' calls I added to Repeatable so I could see what is going on. The 'max is' is the max set in H::F::Model::DBIC _save_has_many and controls the number of repetitions that sub goes through. count is 4 at /usr/lib/perl5/site_perl/5.8.5/HTML/FormFu/Element/Repeatable.pm line 148. repeating 4 at /usr/lib/perl5/site_perl/5.8.5/HTML/FormFu/Element/Repeatable.pm line 152. SELECT me.user_id, me.dssid, me.netid, me.name, me.uid, me.gid, me.type, me.state FROM dss.users me WHERE ( user_id = ? ): '192' SELECT me.paper_id, me.year, me.seqnum, me.title, me.institution, me.date, me.abstract, me.keywords, me.bibtex, me.style, me.old_paperid, me.link FROM papers me WHERE ( me.paper_id = ? ): '645' SELECT me.author_id, me.paper_id, me.name, me.rank FROM authors me WHERE ( me.paper_id = ? ) ORDER BY rank ASC: '645' SELECT me.paper_id, me.year, me.seqnum, me.title, me.institution, me.date, me.abstract, me.keywords, me.bibtex, me.style, me.old_paperid, me.link FROM papers me WHERE ( me.paper_id = ? ): '645' max is 2 at /usr/lib/perl5/site_perl/5.8.5/HTML/FormFu/Model/DBIC.pm line 474. SELECT me.author_id, me.paper_id, me.name, me.rank FROM authors me WHERE ( ( me.author_id = ? AND me.paper_id = ? ) ) ORDER BY rank ASC: '1606', '645' SELECT me.author_id, me.paper_id, me.name, me.rank FROM authors me WHERE ( ( me.author_id = ? AND me.paper_id = ? ) ) ORDER BY rank ASC: '1649', '645' INSERT INTO authors ( name, paper_id, rank) VALUES ( ?, ?, ? ): 'New Author 1', '645', '3' I dump the form params in three places in my controller code since I'm mucking with it. First, here is the relevant sub: sub edit :Path('/edit') :Args(1) :FormConfig('paper.yml') { my ($self, $c, $paper_id ) = @_; # Plug in our CSS $c->assets->include('assets/css/form.css'); # Plug in Jquery autocomplete $c->forward('autocomplete'); my $paper = $c->model('Papers::Papers')->find($paper_id); my $form = $c->stash->{form}; $form->model->default_values($paper); $c->log->debug('After default values'); $c->log->debug(Dumper($form->params)); if ($form->submitted) { $c->log->debug('in submitted'); $c->log->debug(Dumper($form->params)); ## Force rank variables to be set to what I want my $count = $form->param_value('author_count'); foreach my $c (1 .. $count) { $form->add_valid("authors.rank_$c", $c); } } if ($form->submitted_and_valid) { $c->log->debug('in submitted and valid'); $c->log->debug(Dumper($form->params)); $form->model->update($p); } $c->stash->{template} = "edit_paper.tt2"; } And here is the $form->params dump output: [debug] After default values [debug] $VAR1 = { 'author_count' => '4', 'authors' => { 'name_3' => 'New Author 1', 'rank_3' => '', 'name_1' => 'Joe Shmo', 'author_id_1' => '1606', 'rank_2' => '2', 'author_id_3' => '', 'name_4' => 'New Author 2', 'rank_4' => '', 'rank_1' => '1', 'author_id_4' => '', 'author_id_2' => '1649', 'name_2' => 'John Doe' }, 'date' => 'some day', 'submit' => 'Submit', 'keywords' => '', 'bibtex_citation' => '', 'abstract' => 'abstract', 'title' => 'fun with create_related', 'paper_id' => '645', 'institution' => 'no where' }; [debug] in submitted [debug] $VAR1 = { 'author_count' => '4', 'authors' => { 'name_3' => 'New Author 1', 'rank_3' => '', 'name_1' => 'Joe Shmo', 'author_id_1' => '1606', 'rank_2' => '2', 'author_id_3' => '', 'name_4' => 'New Author 2', 'rank_4' => '', 'rank_1' => '1', 'author_id_4' => '', 'author_id_2' => '1649', 'name_2' => 'John Doe' }, 'date' => 'some day', 'submit' => 'Submit', 'keywords' => '', 'bibtex_citation' => '', 'abstract' => 'abstract', 'title' => 'fun with create_related', 'paper_id' => '645', 'institution' => 'no where' }; [debug] in submitted and valid [debug] $VAR1 = { 'author_count' => '4', 'authors' => { 'name_3' => 'New Author 1', 'rank_3' => 3, 'name_1' => 'Joe Shmo', 'author_id_1' => '1606', 'rank_2' => 2, 'author_id_3' => '', 'name_4' => 'New Author 2', 'rank_4' => 4, 'rank_1' => 1, 'author_id_4' => '', 'author_id_2' => '1649', 'name_2' => 'John Doe' }, 'date' => 'some day', 'submit' => 'Submit', 'keywords' => '', 'bibtex_citation' => '', 'abstract' => 'abstract', 'title' => 'fun with create_related', 'paper_id' => '645', 'institution' => 'no where' }; -- GPG Fingerprint: 409B A409 A38D 92BF 15D9 6EEE 9A82 F2AC 69AC 07B9 CACert.org Assurer _______________________________________________ HTML-FormFu mailing list HTML-FormFu@lists.scsys.co.uk http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/html-formfu