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
_______________________________________________
HTML-FormFu mailing list
HTML-FormFu@lists.scsys.co.uk
http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/html-formfu