Binding an array to multiple text fields in a form


#1

I have a model that has the following classes: ShoppingList, Item and
Product.

Product is just a list of product names: Apple, Orange, Banana,
Pear,
Grape. The table has two columns: ID and NAME.

– A ShoppingList has a name (string) and many Item objects.

– Each Item has a quantity (integer) and to-one relationship to
a
Product.

My ShoppingList’s edit view has a form that contains a textfield for
the name of
a shopping list and a table of items and their quantities:

Name: MyShoppingList

Qty. Item
3 Apples
0 Oranges
1 Pear

The Qty. is an editable text field. The Item is a non-editable text
label.

The model object for this view is, of course, a ShoppingList.

I am trying to bind each text field to the quantity attribute of each
item in the shopping list. I tried something like this but it doesn’t
work because Rails wants an instance variable to bind to. How do I
properly bind my array?

<% @shopping_list.items.each do |item| %>

<%= text_field("shopping_list.items[" + item.id.to_s + "].quantity", item.quantity, :size => 3) %> <%= (Product.find item.product_name_id).name%> <% end %>

#2

Let me try to simplify this problem:

To create the html table, I have this code:

<% @shopping_list.items.each do |item| %>

<%= text_field("item.quantity", item.quantity, :size => 3) %> <%= (Product.find item.product_name_id).name%> <% end %>

But it generates this error:

`@item.quantity’ is not allowed as an instance variable name

This tells me that you can only bind instance variables and not
relationships off them. Is this true? Where can I find a detailed
explanation on how binding forms to variables work?


#3

Never mind. I figured it out. The solution is to use the fields_for
tag. The problem was editing multiple models in one large form.