Formulários Rails profundamente aninhados usando o perten_to não estão funcionando?

Estou trabalhando em um formulário confuso que, entre outras coisas, precisa gerenciar uma seção com aninhamento em dois níveis. Está quase funcionando, mas há um problema e a única coisa que posso ver que é diferente de outras formas profundamente aninhadas que funcionam é que há um relacionamento de pertencer a um e não ter um monte. Aqui estão os modelos:

Event
  has_many :company_events, :dependent => :destroy
  accepts_nested_attributes_for :company_events

CompanyEvent
  belongs_to :company
  accepts_nested_attributes_for :company, :update_only => true
  belongs_to :event
  belongs_to :event_type

Company
  has_many :company_events
  has_many :events, :through => :company_events

Portanto, é um relacionamento muitos-para-muitos bastante padrão por meio de uma tabela de links, company_events. O formulário em questão é criar / editar um evento, com um botão Javascript dinâmico "Adicionar empresa", tudo baseado no screencast de Ryan Bates e no repositório do GitHub.

A forma principal:

<table id="companies">
  <tr><th>Company Name</th></tr>
  <% f.fields_for :company_events do |builder| %>
    <%= render 'company_event_fields', :f => builder, :f_o => nil %>
  <% end -%>
</table>
<p><br/><%= link_to_add_fields "Add Company", f, :company_events, "events" %></p>

E o formulário incluído é o seguinte. Uma coisa importante a ser observada é que o ID da empresa é definido por meio de uma atualização Javascript, que não incluirei aqui porque é longa. Basicamente, o usuário começa a digitar um nome, uma lista de preenchimento automático é exibida e clicar no nome define o nome da empresa e o ID no formulário.

<tr class="company_event_fields">
  <td>
    <% f.fields_for(:company) do |company_form| -%>
      <%= company_form.text_field :name, :size => 80 %>
      <%= company_form.hidden_field :id %>
    <% end -%>
  </td>
  <td>
    <%= f.hidden_field :_destroy %>
    <%= link_to_function "remove", "remove_co_fields(this)" %>
  </td>
</tr>

Quando eu atualizo um registro existente, tudo funciona bem. Porém, quando tento salvar o formulário com um registro recém-criado, recebo:

ActiveRecord::RecordNotFound in EventsController#update

Couldn't find Company with ID=12345 for CompanyEvent with ID=

Com o stacktrace:

/Library/Ruby/Gems/1.8/gems/activerecord-2.3.8/lib/active_record/nested_attributes.rb:401:in `raise_nested_attributes_record_not_found'
/Library/Ruby/Gems/1.8/gems/activerecord-2.3.8/lib/active_record/nested_attributes.rb:289:in `assign_nested_attributes_for_one_to_one_association'
/Library/Ruby/Gems/1.8/gems/activerecord-2.3.8/lib/active_record/nested_attributes.rb:244:in `company_attributes='
/Library/Ruby/Gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:2906:in `send'

Examinei o código em nested_attributes e o executei com um depurador. O que está acontecendo parece ser que, porque existe um Company.id, o ActiveRecord está assumindo que já existe uma entrada, mas é claro que não encontra uma. Isso parece muito estranho, pois obviamente eu precisaria passar um ID para criar uma nova entrada CompanyEvent. Então, acho que estou perdendo alguma coisa.

Os exemplos que eu descobri que todo o trabalho parecem aninhados usando relacionamentos has_many por todo o caminho, enquanto que, neste caso, ele pertence a, e eu estou me perguntando se essa é a raiz do problema. Todas as idéias seriam muito apreciadas ...

questionAnswers(2)

yourAnswerToTheQuestion