Not null error from PG on build_other call

I have this code in a stand alone script that uses nokogiri with
activerecord to parse an xml file and initialise a database.

  begin
  this_client = correspondent_f.build_client
  rescue => e
    puts("Rescued error in build.")
    puts(e.backtrace)
    puts(" ")
    puts(correspondent_f.inspect.to_yaml)
    raise e
  end

Which, for a certain input record generates this error:

Rescued error in build.
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/
connection_adapters/abstract_adapter.rb:219:in log' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/ connection_adapters/postgresql_adapter.rb:550:inexecute’
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/
connection_adapters/abstract/database_statements.rb:265:in
update_sql' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/ connection_adapters/postgresql_adapter.rb:561:inupdate_sql’
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/
connection_adapters/abstract/database_statements.rb:49:in
update_without_query_dirty' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/ connection_adapters/abstract/query_cache.rb:18:inupdate’
. . .
— “#<Correspondent id: 1, correspondent_common_name: “tnt skypak
international exp.”, correspondent_legal_name: “TNT SKYPAK
INTERNATIONAL EXP.”, correspondent_legal_form: “UNKN”,
correspondent_legal_name_key: “tntskypakinternationalexp”,
correspondent_status: “HOLD”, changed_at: “2010-03-18 19:49:49”,
changed_by: “hp3000_client_import”, created_at: “2010-03-18
19:49:49”, created_by: “hp3000_client_import”, lock_version: 0>”
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record

/connection_adapters/abstract_adapter.rb:219:in log': PGError: ERROR: null value in column "correspondent_id" violates not-null constraint (ActiveRecord::StatementInvalid) : UPDATE "clients" SET "changed_at" = '2010-03-18 20:07:44', "correspondent_id" = NULL, "lock_version" = 1 WHERE id = 1 AND "lock_version" = 0 from /usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.5/lib/ active_record/connection_adapters/postgresql_adapter.rb:550:inexecute’
from /usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.5/lib/
active_record/connection_adapters/abstract/database_statements.rb:
265:in `update_sql’
. . .

Now, I know that the record triggering the exception is a duplicate of
one already previously loaded into the clients table. This in fact
should trigger a validation error in the Correspondent class. But I do
not see that validation error anywhere and I cannot understand why the
correspondent_id value is null in the second case.

The Client class has this:

belongs_to :correspondent
validates_associated
validates_presence_of :effective_from
validate :date_range

The Correspondent class has this:

has_one :client

I am sure that this situation has a simple explanation and I hope that
someone can provide it to me.