Forum: Ruby on Rails Formatting form tags for children of parrent data?

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.
889e841fc2c52307dc7c85b2426f33f2?d=identicon&s=25 Lance Squire (komb)
on 2006-04-07 20:01
This my first Rails project.

All my previous work was done it Perl, so I may be missing the
Ruby/Rails obvious here.

The site I'm working on needs to display archived programs.
Some of the programs have multiple versions, all belonging to the same
listing.
As such, I've set-up an extra_files table related to the archive list.

Displaying the extra files was trivial. However, when I went to edit the
edit.rhtml file, I had no idea how to format the text input fields so
that they would be automaticly picked-up and placed with the parrent.

Here's what I have:

archives table:
id program_name file_location etc...

archives model:
class Archive < ActiveRecord::Base
	belongs_to :category
	has_many :extra_file
end

extra_files table:
id archive_id name location

extra_files model:
class ExtraFile < ActiveRecord::Base
	belongs_to :archive
end

list.rhtml Relivent section:
<% @programs.each do |program| -%>
<tr>
<td><%= link_to program.program_name, program.file_location %>
<% program.extra_file.each do |file| -%>
<br><%= link_to file.name, file.location %>
<% end -%></td>
<td><%= program.author %></td>
<td><%= program.reference %></td>
<td><%= program.format %></td>
<td><%= program.description %></td>
</tr>

Now How to display the extra_files name and location in the edit.rhtml,
so they can be edited, and  returned to the proper place in the database
is where I'm stuck...

I'm presuming the extra_file id would need to be associated with the
name and location fields somehow...

Here's my edit.rhtml as it currently stands:
<html>
 <head>
  <title>Edit Program Listing</title>
 </head>
 <body>
 <h1>Edit Program Listing</h1>

 <form action="../update/<%= @program.id %>" method="POST"">
  <input id="archive_id" name="archive[id]" size="30"
         type="hidden" value="<%= @program.id %>" />
  <p><b>Title</b><br>
  <input id="program_name" name="archive[program_name]" size="30"
         type="text" value="<%= @program.program_name %>" />
  </p>
  <p><b>Author</b><br>
  <input id="program_author" name="archive[author]"
         size="30" type="text"
         value="<%= @program.author %>" />
  </p>
  <p><b>Format</b><br>
  <input id="program_format" name="archive[format]"
         size="30" type="text"
         value="<%= @program.format %>" />
  </p>
  <p><b>Reference</b><br>
  <input id="program_reference" name="archive[reference]"
         size="30" type="text"
         value="<%= @program.reference %>" />
  </p>
  <p><b>Release Date</b><br>
  <input id="program_release_date" name="archive[release_date]"
         size="30" type="text"
         value="<%= @program.release_date %>" />
  </p>
  <p><b>Description<b><br>
  <textarea id="program_description" name="archive[description]"
         cols="40" rows="20" wrap="virtual"
><%= @program.description %></textarea>
  </p>
  <p><b>Misc (extended Description)</b><br>
  <textarea id="program_misc" name="archive[misc]"
         cols="40" rows="20" wrap="virtual"
><%= @program.misc %></textarea>
  </p>
  <p><b>Baud</b><br>
  <select id="program_baud" name="archive[baud]">
  <% ['2000','300','2000 BlueRam'].each do |baud| -%>
  <option <%= 'selected' if @program.baud == baud %>><%= baud
%></option>
  <% end -%>
  </select>
  </p>
  <p><b>Archival Status</b><br>
  <input id="program_arc_status" name="archive[arc_status]"
         size="30" type="text"
         value="<%= @program.arc_status %>" />
  </p>
  <p><b>File Location<b><br>
  <input id="program_file_location" name="archive[file_location]"
         size="30" type="text"
         value="<%= @program.file_location %>" />
  </p>
  <p><b>Extra Ram</b><br>
  Yes <input name="archive[ext_ram]"
         type="radio" value="1"
         <%= 'checked' if @program.ext_ram == 1 %> />
  No <input name="archive[ext_ram]"
        type="radio" value="0"
        <%= 'checked' if @program.ext_ram == 0 %> />
  </p>

  <p><b>Category:</b><br>

  <select name="archive[category_id]">
   <% @categories.each do |category| -%>
       <option value="<%= category.id %>" <%= 'selected' if category.id
== @program.category_id %>><%= category.name %></option>
   <% end -%>
  </select></p>

<input type="submit" value="Update" />
 </form>

 <a href="/program_downloads/Archive/archive/show/<%= @program.id %>">
Show </a> |
  <%= link_to "Back", :action => "list" %>

 </body>
</html>

I'm looking to add the list of existing extra files after the Category
drop-down.

I started with this:
  <p><b>Extra Files</b><br>

  <% program.extra_file.each do |file| -%>
  <input id="...

... is where I realised I had NO concept how to ensure the data would
stay together properly...

Lance F. Squire
889e841fc2c52307dc7c85b2426f33f2?d=identicon&s=25 Lance Squire (Guest)
on 2006-04-07 22:14
After much hacking I've got this:
  <p><b>Extra Files</b><br>

  <% @program.extra_file.each do |file| -%>
  Name: <input name="archive[extra_file[<%= file.id %>]][name]"
         type="text"
         value="<%= file.name %>" />
  Location: <input name="archive[extra_file[<%= file.id %>]][location]"
  	type="text"
	value="<%= file.location %>" /><br>
  <% end -%>

Which looks promissing in the paramiters view on the error page, but
still dosen't work...

"extra_file[2]"=>{"name"=>"test Extra files2+", "location"=>"#"},
"extra_file[1]"=>{"name"=>"test Extra files1+", "location"=>"#"},
This topic is locked and can not be replied to.