[html-formfu] HTML::FormFu::Model::DBIC problem?
Alex Povolotsky
tarkhil at over.ru
Tue Apr 7 17:33:53 GMT 2009
Hello!
I'm trying to figure out an EXTREMLY strange behaviour of HTML::FormFu,
and understand nothing at all.
Quite simple example, two tables linked with foreign key, absolutely
basic editor using Catalyst:
sub edit: Local FormConfig {
my ($self, $c, $uid) = @_;
my $user = $c->model('Main::Users')->find($uid);
my $form : Stashed;
if ($form->submitted_and_valid()) {
$form->model->update($user);
$c->response->redirect($c->uri_for('/users/'));
$c->detach();
} else {
$form->model->default_values($user);
}
}
Form is simple as well
---
auto_fieldset: 1
elements:
- type: Hidden
name: uid
- type: Text
label: "User's name"
name: name
constraints:
- Required
- type: Length
max: 30
min: 3
- type: Repeatable
nested_name: phones
counter_name: pcount
model_config:
new_empty_row: number
elements:
- type: Hidden
name: phid
- type: Text
name: number
label: Phone
- type: Checkbox
name: delete
label: (delete)
value: 1
model_config:
delete_if_true: 1
- type: Hidden
name: pcount
- type: Submit
name: submit
Adding first phone works as expected, but second call to editor results
in unexplainable commands
(showing DBIC trace)
First edit:
SELECT me.uid, me.name FROM users me WHERE ( ( me.uid = ? OR me.uid = ?
) ): '2', '2'
SELECT me.phid, me.uref, me.number FROM phones me WHERE ( me.uref = ? ): '2'
(posted some data)
SELECT me.uid, me.name FROM users me WHERE ( ( me.uid = ? OR me.uid = ?
) ): '2', '2'
SELECT me.phid, me.uref, me.number FROM phones me WHERE ( me.uref = ? ): '2'
SELECT me.uid, me.name FROM users me WHERE ( ( me.uid = ? OR me.uid = ?
) ): '2', '2'
INSERT INTO phones ( number, uref) VALUES ( ?, ? ): '12345', '2'
SELECT me.uid, me.name FROM users me:
(just called edit/2)
SELECT me.uid, me.name FROM users me WHERE ( ( me.uid = ? OR me.uid = ?
) ): '2', '2'
SELECT me.phid, me.uref, me.number FROM phones me WHERE ( me.uref = ? ): '2'
DELETE FROM phones WHERE ( phid = ? ): '6'
SELECT me.uid, me.name FROM users me WHERE ( ( me.uid = ? OR me.uid = ?
) ): '2', '2'
SELECT me.phid, me.uref, me.number FROM phones me WHERE ( me.uref = ? ): '2'
Why existing record gets deleted?
In schema, has_many/belongs_to are in place.
package One2Many::Schema::Result::Users;
use strict;
use warnings;
use base 'DBIx::Class';
__PACKAGE__->load_components("InflateColumn::DateTime", "Core");
__PACKAGE__->table("users");
__PACKAGE__->add_columns(
"uid",
{
data_type => "integer",
default_value => "nextval('users_uid_seq'::regclass)",
is_nullable => 0,
size => 4,
},
"name",
{
data_type => "character varying",
default_value => undef,
is_nullable => 0,
size => 255,
},
);
__PACKAGE__->set_primary_key("uid");
__PACKAGE__->add_unique_constraint("users_pkey", ["uid"]);
__PACKAGE__->has_many(
"phones",
"One2Many::Schema::Result::Phones",
{ "foreign.uref" => "self.uid" },
);
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-04-07 12:06:32
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:yWW9U7Dvtljn4WWmFjloAA
# You can replace this text with custom content, and it will be
preserved on regeneration
1;
package One2Many::Schema::Result::Phones;
use strict;
use warnings;
use base 'DBIx::Class';
__PACKAGE__->load_components("InflateColumn::DateTime", "Core");
__PACKAGE__->table("phones");
__PACKAGE__->add_columns(
"phid",
{
data_type => "integer",
default_value => "nextval('phones_phid_seq'::regclass)",
is_nullable => 0,
size => 4,
},
"uref",
{ data_type => "integer", default_value => undef, is_nullable => 0,
size => 4 },
"number",
{
data_type => "character varying",
default_value => undef,
is_nullable => 0,
size => 32,
},
);
__PACKAGE__->set_primary_key("phid");
__PACKAGE__->add_unique_constraint("phones_idx", ["number"]);
__PACKAGE__->add_unique_constraint("phones_pkey", ["phid"]);
__PACKAGE__->belongs_to("uref", "One2Many::Schema::Result::Users", { uid
=> "uref" });
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2009-04-07 12:06:32
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:nXV1VcahcQ57DWcfO3LDBg
# You can replace this text with custom content, and it will be
preserved on regeneration
1;
What am I doing wrong?...
Alex
More information about the HTML-FormFu
mailing list