Forum: Ruby on Rails Multiple Form Fields with Same Model?

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.
Donnie Jones (Guest)
on 2006-06-12 21:11
(Received via mailing list)
Hello,

I'm trying to create a form that will allow a user to submit a list of
phone numbers, but the list is dynamically created.  Thus allowing my
form
to submit an unknown number of phone numbers.

Here is some of the code I have been trying:

<%= collection_select( "phone[]", "phone_type_id",
         PhoneType.find(:all, :order => "position"), :id, :description )
     %>

     ( <%= text_field "phone[]", "area_code", :class => "phones" %> )
     <%= text_field "phone[]", "prefix", :class => "phones" %>
     -
     <%= text_field "phone[]", "suffix", :class => "phones" %>
     ext. <%= text_field "phone[]", "extension", :class => "phones" %>

<%= link_to_remote("add",
     :update => "phones-list",
     :url => { :action => "add_phone" },
     :loading => "",
     :complete => ""
     )
%>

The link_to_remote would use AJAX to insert the fields to add a new
phone
number, but the issue is that I don't know how to incorporate an id or
count field into the fields so controller can tell the diffrence between
the fields in the params[].  I tried using the phones[] with '[]' based
upon the agile book, first edition, pg 356 and the rails docs at
http://api.rubyonrails.com/classes/ActionView/Help...

Any help would be greatly appreciated.
Thanks.
__
Donnie
Catherine .. (Guest)
on 2008-08-22 20:32
Donnie Jones wrote:
> Hello,
>
> I'm trying to create a form that will allow a user to submit a list of
> phone numbers, but the list is dynamically created.  Thus allowing my
> form
> to submit an unknown number of phone numbers.
>
> Here is some of the code I have been trying:
>
> <%= collection_select( "phone[]", "phone_type_id",
>          PhoneType.find(:all, :order => "position"), :id, :description )
>      %>
>
>      ( <%= text_field "phone[]", "area_code", :class => "phones" %> )
>      <%= text_field "phone[]", "prefix", :class => "phones" %>
>      -
>      <%= text_field "phone[]", "suffix", :class => "phones" %>
>      ext. <%= text_field "phone[]", "extension", :class => "phones" %>
>
> <%= link_to_remote("add",
>      :update => "phones-list",
>      :url => { :action => "add_phone" },
>      :loading => "",
>      :complete => ""
>      )
> %>
>
> The link_to_remote would use AJAX to insert the fields to add a new
> phone
> number, but the issue is that I don't know how to incorporate an id or
> count field into the fields so controller can tell the diffrence between
> the fields in the params[].  I tried using the phones[] with '[]' based
> upon the agile book, first edition, pg 356 and the rails docs at
> http://api.rubyonrails.com/classes/ActionView/Help...
>
> Any help would be greatly appreciated.
> Thanks.
> __
> Donnie

I know this is knid of old but I have the exact same question actually
(this post never got answered). I actually found a solution but it is
kind of ugly and was wondering if there existed an
easier/prettier/cleaner solution to this problem.
My solution was to use a sessions (cookies) that would store a counter
and be incremented every time theres a call to the function that adda a
new line to the form. This would allow for a unique ID for each entry
An other solution would be the same thing in JavaScript, that is to
implement a counter and to make my own JavaScript function that will do
the same as link_to_remote but will insert the index from the counter.
Any ideas?
Shandy N. (Guest)
on 2008-08-22 21:09
Catherine .. wrote:
> Donnie Jones wrote:
>> Hello,
>>
>> I'm trying to create a form that will allow a user to submit a list of
>> phone numbers, but the list is dynamically created.  Thus allowing my
>> form
>> to submit an unknown number of phone numbers.
>>
>> Here is some of the code I have been trying:
>>
>> <%= collection_select( "phone[]", "phone_type_id",
>>          PhoneType.find(:all, :order => "position"), :id, :description )
>>      %>
>>
>>      ( <%= text_field "phone[]", "area_code", :class => "phones" %> )
>>      <%= text_field "phone[]", "prefix", :class => "phones" %>
>>      -
>>      <%= text_field "phone[]", "suffix", :class => "phones" %>
>>      ext. <%= text_field "phone[]", "extension", :class => "phones" %>
>>
>> <%= link_to_remote("add",
>>      :update => "phones-list",
>>      :url => { :action => "add_phone" },
>>      :loading => "",
>>      :complete => ""
>>      )
>> %>
>>
>> The link_to_remote would use AJAX to insert the fields to add a new
>> phone
>> number, but the issue is that I don't know how to incorporate an id or
>> count field into the fields so controller can tell the diffrence between
>> the fields in the params[].  I tried using the phones[] with '[]' based
>> upon the agile book, first edition, pg 356 and the rails docs at
>> http://api.rubyonrails.com/classes/ActionView/Help...
>>
>> Any help would be greatly appreciated.
>> Thanks.
>> __
>> Donnie

The only way I could think about how to do something like this would be
to have a table relating users to a phone number, that way they could
have as many phone numbers as they wanted. Then as they added a number
if would get entered into the list, your method would go out and get the
numbers (including the one you just added) and then render a partial
inside of a div. Not sure if this helps,

-S
Catherine .. (Guest)
on 2008-08-22 21:17
Shandy N. wrote:
>
> The only way I could think about how to do something like this would be
> to have a table relating users to a phone number, that way they could
> have as many phone numbers as they wanted. Then as they added a number
> if would get entered into the list, your method would go out and get the
> numbers (including the one you just added) and then render a partial
> inside of a div. Not sure if this helps,
>
> -S

Yes that is correct I already have a table relating in my case recipes
to ingredients. The problem is I want to save the ingredients (or in the
case of the example above the phone numbers) only when the whole form is
submitted, hence the need to index each line of the form. The problem
here is to find an easy way to index each ilne of the form. (I hope I'm
being clear, I'm not english).
This topic is locked and can not be replied to.