Forum: Ruby on Rails Dynamically generated form + Saving multiple records at once

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.
187ae3617754d44f8b163e1b7b3ae019?d=identicon&s=25 Marcelo Ruiz (Guest)
on 2009-03-21 14:37
(Received via mailing list)
Hi Everybody,

My name is Marcelo Ruiz, software developer from Argentina starting to
work with rails.

I'm building a web app to track traffic information for roads. We have
operators that create Reports associated to each Segment of different
Roads.

I have the following models:

* Road (has_many :segments)
* Segment (belongs_to :road  has_many :reports)
* Report (belongs_to :segment)

The requirement is that I have to show up only one form per Road, so
the operator can load the Reports for all the Segments in that Road at
once.

This would be something similar to this:

Road "Route 55"
------------------------

Report for Segment 1: (text field)

Report for Segment 2: (text field)

Report for Segment 3: (text field)

(SUBMIT BUTTON)

This means that I will have to:

1. Dinamically generate the fields, according to the number of
segments the selected Road has.
2. Create multiple Reports at the same time.

Any advise on how to do this?
4c438a80fc30661ad619ea177cf9cbd0?d=identicon&s=25 Freddy Andersen (Guest)
on 2009-03-21 14:56
(Received via mailing list)
I think you will be happy to watch this screencast

http://railscasts.com/episodes/75-complex-forms-part-3

Its a project that has_many tasks but it talks about exactly the
problem you have with build_segments 3.times...
187ae3617754d44f8b163e1b7b3ae019?d=identicon&s=25 Marcelo Ruiz (Guest)
on 2009-03-23 21:43
(Received via mailing list)
Thank you Freddy. That wasn't exactly what I needed to do, but the
screencasts helped me in another case.

What I actually need to do is simpler: create multiple Reports at the
same time. Each report has a description with a textfield and I have
to associate it with a different segment. That's all.

Any help? Thanks!
187ae3617754d44f8b163e1b7b3ae019?d=identicon&s=25 Marcelo Ruiz (Guest)
on 2009-03-23 22:09
(Received via mailing list)
This is a code sample of what I have made so far:

<h1>New Report for <%= @way.road.name%>, <%= @way.name%></h1>

<%= form_tag :action => :create, :id => @way.id%>

    <p>Date: <%= datetime_select("report", "time") %> </p>

    <p>Priority:
    <%= radio_button("report", "priority", 1) %> high -
    <%= radio_button("report", "priority", 2, {:checked => "checked"})
%>  medium -
    <%= radio_button("report", "priority", 3) %> low</p>

    <% for segment in @segments%>

        <%= hidden_field("report[]", "segment_id", { :value =>
segment.id}) %>

        <p>Segment: <strong><%= segment.name%></strong></p>

        <p>Traffic Status:
        <%= select("report[]", "status_id", Status.find(:all, :order
=> "Severity").map {|u| [u.name, u.id]}) %>
        </p>

        <p>Description:<br/>
        <%= text_area("report[]", "description", {:rows => 6, :cols =>
70}) %></p>

        <p>Short Desc.:<br/>
        <%= text_area("report[]", "short_description", {:rows =>
2, :cols => 70}) %></p>

    <% end %>

    <p><%= submit_tag %></p>

</form>

This form renders well. Notice how I have some fields of Report that
are common to all segment reports (Hour and Priority) and some that
vary (segment_id, status_id, description and short_description). I'm
prefixing the first fields with "report" and the others with "report
[]". I'm not sure if it's a good idea.

Now I don't have any idea how I should handle this in the controller.

Any idea?

Thanks!
This topic is locked and can not be replied to.