# Render partials with nested attributes from another model

**URL:** <https://www.ruby-forum.com/t/render-partials-with-nested-attributes-from-another-model/177251>\
**Category:** Rails\
**Created:** [October 14, 2009, 7:12am UTC](https://www.ruby-forum.com/t/render-partials-with-nested-attributes-from-another-model/177251 "2009-10-14T07:12:31Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Ryan\_Tinsley](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/aeb1de/32.png) [@Ryan\_Tinsley](https://www.ruby-forum.com/u/Ryan_Tinsley)\
**Post date:** [October 14, 2009, 7:12am UTC](https://www.ruby-forum.com/t/render-partials-with-nested-attributes-from-another-model/177251/1 "2009-10-14T07:12:31Z")

</div>

Hi everyone,

My previous question was posted  
here[http://groups.google.com/group/rubyonrails-talk/browse\_thread/thread/dddaeb075789d4b5](http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/dddaeb075789d4b5).  
I’m starting a new topic as the problems have shifted.

I have a rails application that models a house. There is a house model  
that  
has\_many rooms. A room has a house\_id and a name. I’ve also used the  
complex-form-examples [http://github.com/ryanb/complex-form-examples](http://github.com/ryanb/complex-form-examples) to  
give room nested attributes of lights and small\_appliances.  
complex-form-examples uses RJS and partials to accomplish this.

There is a controller called calculator that is what users will use to  
access the application. When the submit button on calculator is  
pressed, it  
saves house information and redirects to an add\_rooms page (located in  
app/views/calculator/add\_rooms.html.erb) where the user can add rooms to  
the  
house. The add\_rooms page uses a partial from  
app/views/rooms/\_room\_form.html.erb. I can get this page to display by  
removing the add\_child\_link links. If I don’t remove them, I get this  
error:

Showing app/views/rooms/\_room\_form.html.erb where line #13 raised:

> undefined method `reflect\_on\_association’ for NilClass:Class

With add\_child\_link gone the page renders. However, when I click submit  
I  
get a new error message:

ActiveRecord::AssociationTypeMismatch in CalculatorController#add\_room

> C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active\_record/associations/association\_collection.rb:320:in  
> `each' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/base.rb:2740:in `attributes=’  
> C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active\_record/base.rb:2438:in  
> `initialize' C:/Users/ryan/Downloads/react/app/controllers/calculator_controller.rb:31:in `new’  
> C:/Users/ryan/Downloads/react/app/controllers/calculator\_controller.rb:31:in  
> `add\_room’

If I remove the small\_application part, the same thing happens for  
light. I  
think it has something to do with accepts\_nested\_attributes\_for in the  
room  
model.

I need to get this page working so that rooms can be added to a house  
without using the scaffold built pages. Users won’t have access to  
those.  
I also need the house id to be saved as house\_id in the rooms table.

Here is the code:

_app/models/room.rb_

```
class Room < ActiveRecord::Base

```

> ```
> belongs_to :house
> has_many :lights, :dependent => :destroy
> has_many :small_appliances, :dependent => :destroy
> validates_presence_of :name
> accepts_nested_attributes_for :lights, :reject_if => lambda { |a|
> 
> ```
> 
> a.values.all?(&:blank?) }, :allow\_destroy =\> true  
> accepts\_nested\_attributes\_for :small\_appliances, :reject\_if =\> lambda  
> { |a| a.values.all?(&:blank?) }, :allow\_destroy =\> true  
> end

_app/models/house.rb_

```
class House < ActiveRecord::Base

```

> ```
> has_many :rooms
> 
> # validation code not included
> 
> def add_room(room)
> rooms << room
> end
> 
> end
> 
> ```

_app/controllers/calculator\_controller.rb_

```
class CalculatorController < ApplicationController

```

> ```
> def index
> end
> 
> ```

```
  # save_house is called when submit is

```

> 

```
  # pressed in app/views/calculator/index.html.erb

```

> 

```
  def save_house

```

> ```
> end
> redirect_to :action => 'index'
> flash[:notice] = "Room \"#removed_email_address@domain.invalid}\" was successfully
> rescue ActiveRecord::RecordNotFound
> logger.error("Attempt to access invalid house #{params[:id]}")
> flash[:notice] = "You must create a house before generating a
> 
> ```
> 
> report"  
> redirect\_to :action =\> ‘index’  
> end
> 
> ```
> end
> 
> ```

_app/views/calculator/add\_rooms.html.erb_

> ```
> <%= h room.usage_hours %> hours per day.
> <%= button_to "Continue to report", :action => "report", :id =>
> 
> ```
> 
> @house %\>

_app/views/rooms/\_room\_form.html.erb_

```
<% form_for :room, :url => { :action => :add_room, :id => @house } 

```

do

> light\_form } %\>  
> form, :small\_appliances %\>
> 
> ```
> <p><%= form.submit "Submit" %></p>
> <% end %>
> 
> ```

_application\_helper.rb_

```
module ApplicationHelper

```

> ```
> end
> end
> 
> ```

_public/javascripts/application.js_

function insert\_fields(link, method, content) {

> ```
> hidden_field.value = '1';
> 
> ```
> 
> }  
> $(link).up(“.fields”).hide();  
> }

Thanks,  
Ryan
