¿Formas de rieles profundamente anidadas usando belong_to no funcionan?

Estoy trabajando en un formulario desordenado que, entre otras cosas, tiene que administrar una sección con anidamiento de dos niveles. Casi funciona, pero hay un inconveniente y lo único que puedo ver que es diferente de otras formas profundamente anidadas que funcionan es que hay una relación de pertenece a, en lugar de tener muchas. Aquí están los 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

Por lo tanto, es una relación estándar de muchos a muchos a través de una tabla de enlaces, eventos_empresas. El formulario en cuestión es crear / editar un evento, con un botón Javascript dinámico "Agregar empresa", todo basado en el screencast de Ryan Bates y el repositorio de GitHub.

La 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>

Y la forma incluida es la siguiente. Una cosa importante a tener en cuenta es que el ID de la empresa se configura a través de una actualización de Javascript, que no incluiré aquí porque es largo. Básicamente, el usuario comienza a escribir un nombre, se muestra una lista de autocompletar y al hacer clic en el nombre se establece el nombre de la empresa y la identificación en el formulario.

<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>

Cuando actualizo un registro existente, todo funciona bien. Sin embargo, cuando intento guardar el formulario con un registro recién creado, obtengo:

ActiveRecord::RecordNotFound in EventsController#update

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

Con el 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'

Revisé el código en nested_attributes y lo ejecuté con un depurador. Lo que sucede parece ser que debido a que hay un Company.id, ActiveRecord está asumiendo que ya hay una entrada, pero luego, por supuesto, no encuentra una. Esto parece muy extraño, ya que obviamente tendría que pasar un ID para crear una nueva entrada de CompanyEvent. Entonces, supongo que me falta algo.

Los ejemplos que he encontrado de que todo el trabajo parece estar anidado usando relaciones has_many hasta el final, mientras que en este caso es unéto_, y me pregunto si esa es la raíz del problema. Cualquier idea sería muy apreciada ...

Respuestas a la pregunta(2)

Su respuesta a la pregunta