fields_for inserts 2 identical rows to the connecting table (has_many :through)

My models are TranslationKey, TranslationValue and KeyValue.

Here is the relevant part in the log: (the last two lines are identical inserts!)

Processing TranslationKeysController#create (for 127.0.0.1 at 2010-05-04 22:13:31) [POST]   Parameters: {"commit"=>"Create", "authenticity_token"=>"J+dt/ qHwHkbKygh0wBPnXPLtpkb3Pb8URxGucEbpLa0=", "translation_key"=>{"name"=>"key1", "translation_values_attributes"=>{"0"=>{"text"=>"value1"}}}}

INSERT INTO `translation_keys` (`name`, `created_at`, `updated_at`) VALUES('key1', '2010-05-04 22:13:31', '2010-05-04 22:13:31') INSERT INTO `translation_values` (`created_at`, `updated_at`, `text`, `language_id`) VALUES('2010-05-04 22:13:31', '2010-05-04 22:13:31', 'value1', NULL) INSERT INTO `key_values` (`translation_key_id`, `translation_value_id`, `created_at`, `updated_at`) VALUES(16, 27, '2010-05-04 22:13:31', '2010-05-04 22:13:31') INSERT INTO `key_values` (`translation_key_id`, `translation_value_id`, `created_at`, `updated_at`) VALUES(16, 27, '2010-05-04 22:13:31', '2010-05-04 22:13:31')

And here is the new template:

<% form_for(@key) do |f| %>   <% if f.error_messages.length > 0 %>     <div class="error-message">       <%= error_messages_for :translation_key, :header_message => 'Error', :message => '' %>     </div>   <% end %>

  <p>     <%= f.label :name, 'Key name' %>     <br />     <%= f.text_field :name %>   </p>

   <p>     <% f.fields_for :translation_values do |value_fields| %>       <%= value_fields.label :text, 'Content' %>       <br />       <%= value_fields.text_area :text %>     <% end %>   </p>

  <p>     <%= f.submit 'Create' %>   </p> <% end %>

btw, my new action has this:

@key = TranslationKey.new @key.translation_values.build