Hi all,

Here is the setup:

I'm writing an application to model a house. Houses have rooms.  I
need the room to have a name, an id, and then one or more lights. Each
light has wattage, hours_per_day, and quantity. I'd also like the room
to have many small_appliances, but I haven't gotten that far yet.

The best I've been able to figure out is to have a separate table for
Lights so that a room can have many lights. My setup is a Houses table
that has_many Rooms.  I have a Rooms table that has_many Lights.  I
have a page where you can add a Room to a House.

On this page there is a text_field for name, and 3 sets of text_fields
for the lights, since I can't figure out a way to allow the user to
dynamically add extra lights. The code snippet:

--------------------------

<% # form_for :room, :url => { :action => :add_room, :id => @house }
do |form| %>
   <fieldset>

    <legend>Add a Room</legend>

    <div>
      <%= form.label :name, "Name of room: " %>
      <%= form.text_field :name %>
    </div>

    <p><strong>Lights</strong></p>

    <p class="description tier2">Enter lighting information for up to
three different types of lights.</p>

    <div id="lights0">
      <%= form.label :number_of_lights, "Number of lights: " %>
      <%= form.text_field :number_of_lights, :size => 2 %><br />
      <%= form.label :wattage, "Wattage of lights: " %>
      <%= form.text_field :wattage, :size => 2 %><br />
      <%= form.label :hours_used_per_day, "Number of hours per day
lights are on: " %>
      <%= form.text_field :hours_used_per_day, :size => 2 %>
    </div><br />

    <div id="lights1">
      <%= form.label :number_of_lights1, "Number of lights: " %>
      <%= form.text_field :number_of_lights1, :size => 2 %><br />
      <%= form.label :wattage1, "Wattage of lights: " %>
      <%= form.text_field :wattage1, :size => 2 %><br />
      <%= form.label :hours_used_per_day1, "Number of hours per day
lights are on: " %>
      <%= form.text_field :hours_used_per_day1, :size => 2 %>
    </div><br />

    <div id="lights2">
      <%= form.label :number_of_lights2, "Number of lights: " %>
      <%= form.text_field :number_of_lights2, :size => 2 %><br />
      <%= form.label :wattage2, "Wattage of lights: " %>
      <%= form.text_field :wattage2, :size => 2 %><br />
      <%= form.label :hours_used_per_day2, "Number of hours per day
lights are on: " %>
      <%= form.text_field :hours_used_per_day2, :size => 2 %>
    </div>

    <%= submit_tag "Add room" %>
  </fieldset>
  <% end %>

--------------------------

And here is the code snippet from the controller.

--------------------------

def add_room
    @house = House.find(params[:id])
    @room = Room.new(params[:room])
    @light = Light.new(params[:light])

    respond_to do |format|
      if @room.save
        @light.save
        @house.add_room(@room)
        @house.save
        flash[:notice] = "Room \"#...@room.name}\" was successfully
added."
        format.html { render :action => 'add_rooms' }
        format.xml { render :xml => @room, :status
=> :created, :location => @room }
      else
        format.html { render :action => 'add_rooms' }
        format.xml  { render :xml => @room.errors, :status
=> :unprocessable_entity }
      end
    end
  rescue ActiveRecord::RecordNotFound
    logger.error("Attempt to access invalid house #{params[:id]}")
    flash[:notice] = "You must create a house before adding a room"
    redirect_to :action => 'index'
  end

--------------------------


My problem is that I can't get this form to save the room and lights
(and later small_appliances).  After reading various sources I was
trying to use <% form_tag({:controller => "calculator", :action =>
"add_room"} ) %> instead of form_for, but I'm not sure how to access
the params correctly. How can I save to both tables?

Thanks in advance,
Ryan
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to