[prev] [thread] [next] [Date index for 2005/10/06]
CDBI::FromForm does this:
sub _run_update {
my ( $me, $them, $results ) = @_;
foreach my $col ( keys %{ $results->valid } ) {
if ( $them->can($col) ) {
next if $col eq $them->primary_column;
my $val = $results->valid($col);
$them->$col($val);
}
}
$them->update;
return 1;
}
Unfortunately, that "can" check finds methods that are not columns in
that table. I'm wondering if that shouldn't be a check against
$them->columns instead of calling "can".
An example might be a User form that has checkboxes for their "Roles"
where the role table is related to the user table via a mapping table.
CDBI is nice and sets up the mapping so I can do:
@roles = $user->roles;
But then if I have "roles" as a field in my form I get an error:
my $results = Data::FormValidator->check(
{ roles => [1,4] },
{ required => ['roles'] }
);
User->retrieve( 1 )->update_from_form( $results );
Can't coerce array into hash at /usr/local/share/perl/5.8.7/Class/DBI/Sweet.pm line 198.
See any reason not to use $them->columns instead of $them->can?
I can hear someone suggesting to use another name for my "roles"
field, but I need (want) to use the actual name because my template
widget generates the list of choices automatically by calling
"available_items" on the class.
[% MACRO radio_select(name) WRAPPER div_required %]
[% FOR i = item.available_items( name ) %]
<label for="[% name _ i.id %]" class="labelRadio">
<input type="radio" name="[% name %]" id="[% name _ i.id %]" class="inputRadio" value="[% i.id %]">[% i.name | html %]
</label>
[% END %]
[% END %]
I suppose the other option is to just trim the DFV hash returned by
$results->valid.
Anyone else hate forms?
--
Bill Moseley
moseley@xxxx.xxx
_______________________________________________
ClassDBI mailing list
ClassDBI@xxxxx.xxxxxxxxxxxxxxxx.xxx
http://lists.digitalcraftsmen.net/mailman/listinfo/classdbi
|
[CDBI] CDBI::FromForm and non-column methods
|
Generated at 10:29 on 10 Oct 2005 by mariachi v0.52