complex forms and :index => nil issues

Hi - I'm trying to figure out how to group nested fields in the form such that they all submit with a certain order. I followed the complex forms railscast (#75 Complex Forms Part 3 - RailsCasts), but I'm trying to submit a nested model with more than a single field.

<% fields_for 'project[task_attributes]', task do |tf| %>

  <p>Name: <%= tf.text_field :name, :index => nil %></p>

  <p>Start: <%= tf.text_field :start, :index => nil %></p>

  <p>End: <%= tf.text_field :end, :index => nil %></p>

  <% unless task.new_record? %>     <% tf.hidden_field :id, :index => nil %>   <% end %>

<% end -%>

When I submit, params looks strange and is completely disorganized:

{ "project" =>   { "name" => "test",     "task_attributes" => [{ "start" => "10:00" },                           { "start" => "12:00" },                           { "end" => "10:30", "start" => "11:00" },                           { "end" => "11:30" },                           { "end" => "12:30", "id" => "1" },                           { "id" => "2", "name" => "mow lawn" },                           { "name" => "buy milk" },                           { "name" => "clean room" }] }}

If I ommit the :index => :nil, I get an error "conflicting types for parameter containers. Expected an instance of Array but found an instance of Hash" called on task_attribues. What I need is exactly that - a hash grouping each task by id with it's attributes: { "task_attributes" => { "1" => { "name" => 'buy milk',            "start" => '10:00',            "end" => '10:30' }   "2" => {..}...}

I'm feeling like I'm missing something big here... Any help will be great - thanks.

When I submit, params looks strange and is completely disorganized:

{ "project" => { "name" => "test",    "task_attributes" => [{ "start" => "10:00" },                          { "start" => "12:00" },                          { "end" => "10:30", "start" => "11:00" },                          { "end" => "11:30" },                          { "end" => "12:30", "id" => "1" },                          { "id" => "2", "name" => "mow lawn" },                          { "name" => "buy milk" },                          { "name" => "clean room" }] }}

If I ommit the :index => :nil, I get an error "conflicting types for parameter containers. Expected an instance of Array but found an instance of Hash" called on task_attribues. What I need is exactly
that - a hash grouping each task by id with it's attributes: { "task_attributes" => { "1" => { "name" => 'buy milk',           "start" => '10:00',           "end" => '10:30' } "2" => {..}...}

I'm guessing the problem here is new records ? the easiest way out of
here is to drop all the :index => nil, but if the record is new the
call fields_for ..., :index => 'something'

new records would then appear with that key in the task_attributes
hash (obviously make the index unique)

Fred

Frederick Cheung wrote: