Patch for ActiveRecord - Nested arrays of hashes in update

Hi guys, I would like comments on the following. I want to send nested arrays of hashes so the has_many relationships update automatically each object. This is what I've done.

/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/active_record/ associations/association_collection.rb : Line 136

def replace(original_other_array)   other_array = original_other_array.collect {|element| if element.is_a? Hash then create(element) else element end }         other_array.each { |val| raise_on_type_mismatch(val) }

        load_target         other = other_array.size < 100 ? other_array : other_array.to_set         current = @target.size < 100 ? @target : @target.to_set

        @owner.transaction do           delete(@target.select { |v| !other.include?(v) })           concat(other_array.select { |v| !current.include?(v) })         end end

** notice that if a Hash is received, then we create(element) **

Of course this could be dangerous, so I am looking for more advise...

In your view you would have the following. This will produce a nested array of hashes for "score" like this (don't worry about the 3=> thingies...

{"commit"=>"Edit", "id"=>"2", "evaluation"=>{ "entry_id"=>"1", "scores"=>{"3"=>{"score"=>"6", "evaluation_criterium_id"=>"1", "id"=>"3", "evaluation_id"=>"2"}, "4"=>{"score"=>"5", "evaluation_criterium_id"=>"2", "id"=>"4", "evaluation_id"=>"2"}}, "judge_id"=>"1"}}

*** VIEW ***

<!--[form:evaluation]-->

<div>   Name of Entrant: <%= @evaluation.entry.name_of_entrant %> <br />   Category: <%= @evaluation.entry.individual_category.name %> <br />   Judge's Name: <%= @evaluation.judge.name %>

  <%= hidden_field "evaluation", "entry_id" %>   <%= hidden_field "evaluation", "judge_id" %>

  <div style="margin: 1em;">   <table>     <% for @score in @evaluation.scores %>       <% fields_for "evaluation[scores]", @score do |scores_fields| %>         <tr>           <td>             <%= @score.evaluation_criterium.criterium %>           </td>           <td>             <%= scores_fields.select :score, *[1..10] %>             <%= scores_fields.hidden_field :id %>             <%= scores_fields.hidden_field :evaluation_id %>             <%= scores_fields.hidden_field :evaluation_criterium_id %>           </td>         </tr>       <% end %>     <% end %>   </table>   </div>

</div> <!--[eoform:evaluation]-->