[html-formfu] Creating a new record

Ascii King tech at swattermatter.com
Tue Mar 17 12:49:29 GMT 2009


I have a has_many relationship between Character.pm and 
CharacterBackground.pm  I apologize for the long names, but I was trying 
to make sure it wasn't the naming that was causing the problem. 

When I call a new record from Character and use a repeatable element to 
pull up and display the CharacterBackground, I get a repeated option for 
every single record (all records) in the CharacterBackground table. 
There should be no related records in the CharacterBackground table when 
I call a new record, so I should only get the one instance of a 
repeatable element that is caused by the 'new_empty_row_multi' option.

When I edit an existing record, the proper number of records show up and 
everything works as expected.

Thank you for your help.


Character.pm
fields:
    character_id
    name
    etc..
    set_primary_key("character_id")

__PACKAGE__->has_many('link_characterbackground_h' => 
'Orpheus::Schema::CharacterBackground', 'character_id');

CharacterBackground.pm
fields:
    char_back_id
    character_id
    etc...
    set_primary_key("char_back_id")
__PACKAGE__->belongs_to('link_charbackchar_b' => 
'Orpheus::Schema::Character', 'character_id' );




character.yml
---
indicator: submitted
elements:

# NAME --
    - type: Text
      name: name
      label: Name

# THECOUNT --
    - type: Hidden
      name: characterbackground_counter

    - type: Repeatable
      nested_name: link_characterbackground_h
      counter_name: characterbackground_counter
      model_config:
        new_empty_row_multi: background_name
      elements:

          - type: Hidden
            name: char_back_id

# BACKGROUND_NAME --
          - type: Select
            name: background_name
            empty_first: 1

# SUBMIT --
    - type: Submit
      name: submitted
      value: Submit


Here is the code that I use to edit a record. It works properly.
<a href="[% c.uri_for('character', char_rec.character_id) %]">Edit</a>

Here is the code I use to call for a new record.
<a href="[% c.uri_for('character') %]">Create a New Character</a>


Character.pm
-----------------------------------
sub character : Local FormConfig('character/character.yml') {
    my ($self, $c, $id) = @_;

    my $book;

    if (defined($id)) {

        $book = $c->model('DB::Character')->find($id);

        unless ($book) {
            $c->stash->{error_msg} = "Invalid Character record -- Cannot 
edit";
            $c->response->redirect($c->uri_for('list_character'));
            $c->detach;
        }
    } else {

        $book = $c->model('DB::Character')->new_result({});
    }

    my $form = $c->stash->{form};

    if ($form->submitted_and_valid) {
        $form->model->update($book);
        $c->stash->{status_msg} = 'Record ammended';
        $c->response->redirect($c->uri_for('list_character'));
        $c->detach;
    } else {
        $form->model->default_values($book);
    }

    $c->stash->{given_title} = 'Edit Character';
    $c->stash->{template} = 'character/character.tt2';
}


Carl Franks wrote:
> Hi Ascii,
> Can you post your form config/code
> and a basic outline of the relevant DBIC tables/relationships.
>
> Plus, explain what you want the Repeatable element to do.
> Is the problem that it's not just editing the /related/ rows in the
> 'many' table, but /all/ rows?
>
> Cheers,
> Carl
>   



More information about the HTML-FormFu mailing list