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| %> <tr> <td><%= text_field("shopping_list.items[" + item.id.to_s + "].quantity", item.quantity, :size => 3) %></td><td><%= (Product.find item.product_name_id).name%></td> </tr> <% end %>
on 2007-07-05 04:12
on 2007-07-05 05:20
Let me try to simplify this problem: To create the html table, I have this code: <% @shopping_list.items.each do |item| %> <tr> <td><%= text_field("item.quantity", item.quantity, :size => 3) %></ td><td><%= (Product.find item.product_name_id).name%></td> </tr> <% 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?
on 2007-07-05 17:37
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.