On 1/30/07, John Siracusa <[EMAIL PROTECTED]> wrote: > I have db_object_from_form() and init_with_db_object() methods that > will handle a tree of RDBO-derived objects that correspond to a tree > of nested RHTMLO forms. The code is included at the end of this > email, but it's still "in progress" and may be buggy.
...and it was. Below is an updated version of init_with_db_object(). -John --- sub init_with_db_object { my($self, $object) = @_; croak "Missing required object argument" unless($object); $self->clear(); my $selected_object; foreach my $field (sort { $a->name cmp $b->name } $self->fields) { my $name = $field->name; $selected_object = $object; if($name =~ /$FF_SEPARATOR_RE/o) { my $nibble = $name; my $tmp_obj = $selected_object; while($nibble =~ s/^([^$FF_SEPARATOR]+)$FF_SEPARATOR_RE//o) { my $related = $1; last unless($tmp_obj->can($related)); if(Rose::DB::Object::Util::has_loaded_related($tmp_obj, $related)) { $tmp_obj = $tmp_obj->$related() } else { my $new_obj; eval { $new_obj = $tmp_obj->$related() }; if($@ || !$new_obj) { # Restore failed segment $nibble = "$related$FF_SEPARATOR$nibble"; last; } $tmp_obj = $new_obj; } } if($nibble =~ /$FF_SEPARATOR_RE/o) { $name = $field->local_name; } else { $name = $nibble; $selected_object = $tmp_obj; } } else { $name = $field->local_name; } if($selected_object->can($name)) { #$Debug && warn field($name) = $selected_object->$name = ", $selected_object->$name(), "\n"; $field->input_value(scalar $selected_object->$name()); } } } ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier. Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ Rose-db-object mailing list Rose-db-object@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rose-db-object