[html-formfu] Model::DBIC and nested blocks not updating

Mario Minati mario.minati at googlemail.com
Tue Sep 8 22:02:25 GMT 2009


Hi Charlie,

could you add the content of $value in _save_columns, or setup a 
(failing) test from your problem, that would ease the debugging.

Greets,

Mario


Charlie Garrison schrieb:
> Good morning,
>
> I'm having a problem with nested blocks not updating repeatable 
> (has_many) records. I think it's a bug but could be a problem with my 
> app. My form config looks like this:
>
> elements:
>     - type: Text
>       name: username
>     - type: Text
>       name: password
>
>     - type: Block
>       nested_name: customer
>       elements:
>         - type: Text
>           name: name_company
>         - type: Hidden
>           name: id
>
>         - type: Hidden
>           name: addr_count
>
>         - type: Repeatable
>           nested_name: addresses
>           counter_name: addr_count
>           model_config:
>             empty_rows: 1
>             new_rows_max: 1
>           elements:
>             - type: Hidden
>               name: id
>             - type: Text
>               name: addr_street
>               model_config:
>                 delete_if_empty: 1
>
> The actual error is DBIC::Validation failure when updating the Address 
> record. The validation is failing since all fields are empty. Fields 
> are empty because _save_columns is getting elements from 'customer' 
> block rather than 'addresses' (determined through lots of warn 
> statements, below). If I remove the DBIC::Validation checks then all 
> records (user/customer/address) are created as expected but the 
> address record has blank fields.
>
> My schema setup looks like this:
>
> package Schema::Result::User;
> ...
> __PACKAGE__->might_have(  customer  => 'Schema::Result::Customer', 
> 'user_id');
>
>
> package Schema::Result::Customer;
> ...
> __PACKAGE__->has_many(    addresses => 'Schema::Result::Address', 
> 'customer_id');
>
>
> package Schema::Result::Address;
> ...
>
>
> Watching lots of warn statements I added to Model::DBIC I see things 
> like:
>
> doing update for: MyApp::Model::DBIC::User
> doing save_columns for: MyApp::Model::DBIC::User
> save_columns for: username
> save_columns for: password
>
> doing update for: MyApp::Model::DBIC::Customer
> doing save_columns for: MyApp::Model::DBIC::Customer
> save_columns for: name_company
> save_columns for: id
> save_columns for: addr_count
>
> doing save_has_many for: MyApp::Model::DBIC::Customer
> save_has_many - block for: customer.addresses_1.id
> save_has_many - insert for: customer.addresses_1.id
> insert_has_many - new_related for: addresses
> save_has_many - update for: customer.addresses_1.id
>
> doing update for: MyApp::Model::DBIC::Address
> doing save_columns for: MyApp::Model::DBIC::Address
> save_columns for: name_company
> save_columns for: id
> save_columns for: addr_count
>
>
> And it's the last bit where _save_columns is getting a field/element 
> list from the customer block rather than the address block.
>
> I've had a look at the code for Model::DBIC but I can't really follow 
> all the nested logic to work out how to fix it, or determine whether 
> it's a problem with my app/config.
>
> Any help or suggestions would be appreciated.
>
> Thanks,
> Charlie
>




More information about the HTML-FormFu mailing list