Forum: Ruby on Rails complex forms and :index => nil issues

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
7db3b1680807d393d40260591b4ae5e0?d=identicon&s=25 sa 125 (sa125)
on 2009-02-23 16:57
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 (http://railscasts.com/episodes/75), 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.
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2009-02-23 17:19
(Received via mailing list)
On 23 Feb 2009, at 15:57, sa 125 wrote:
>                          { "id" => "2", "name" => "mow lawn" },
> { "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
006a4831843b48f6102d5d3cf92ae283?d=identicon&s=25 Shilo Ayalon (gte351s)
on 2009-02-24 13:59
Frederick Cheung wrote:
> On 23 Feb 2009, at 15:57, sa 125 wrote:
>>                          { "id" => "2", "name" => "mow lawn" },
>> { "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


I did as you proposed and seperated the new record from the edited one.
I get the hash I wanted indexed by id (for edit), but apparently rails
doesn't like it and throws an error:

Conflicting types for parameter containers. Expected an instance of
Array but found an instance of Hash..
7db3b1680807d393d40260591b4ae5e0?d=identicon&s=25 sa 125 (sa125)
on 2009-02-25 09:59
I read that rails 2.3 will handle nested models seamlessly with
accepts_nested_attributes_for inside the parent model
(http://guides.rubyonrails.org/2_3_release_notes.html).

Any idea when the final 2.3 is going to be released (currently in RC1)?
This topic is locked and can not be replied to.