http://qs1969.pair.com?node_id=323751


in reply to Re: Re: Re: Class::DBI find_or_create method inserts record but $obj->id is undef
in thread Class::DBI find_or_create method inserts record but $obj->id is undef

Mea culpa. Thanks for the reminder I have been away from Perl for a good while.

Unfortunately the Class::DBI update() method does not work unless the $obj has an id defined and part of the problem here is that the insert id isn't in $obj unless find_or_create gets an explicit undef or an explicit $id.
TIA
jg

_____________________________________________________
"The man who grasps principles can successfully select his own methods.
The man who tries methods, ignoring principles, is sure to have trouble.
~ Ralph Waldo Emerson
  • Comment on Re: Re: Re: Re: Class::DBI find_or_create method inserts record but $obj->id is undef
  • Download Code

Replies are listed 'Best First'.
Re: Re: Re: Re: Re: Class::DBI find_or_create method inserts record but $obj->id is undef
by perrin (Chancellor) on Jan 24, 2004 at 02:00 UTC
    That's why I said you should delete the value AFTER the call to find_or_create. Alternatively, you could replace your loop with this:
    foreach my $field (grep { $_ ne 'id' } $q->param) {
      Perrin,
      I appreciate your replying but the deletion is being done after the call to find_or_create. For whatever reason when CGI is packaging up the hidden field in the form that sets id='' it does it in a way that Class::DBI sees as other than undef. Deleting the $q->param does not solve this. However, having Template-Toolkit conditionally print the hidden field based on whether id is deined does solve the problem. No param named id unless it is defined. Still, it is odd to me that Class::DBI would have this behavior. Thank you for your attention to my dilemma!
      Peas and hominy,
      jg
      _____________________________________________________
      "The man who grasps principles can successfully select his own methods.
      The man who tries methods, ignoring principles, is sure to have trouble.
      ~ Ralph Waldo Emerson