TemplateError for second-level partial during AJAX update.

Hi All,

Could someone please explain to me why I'm getting an
ActionView::TemplateError when I try to use AJAX to update the
interface while using the following code:

      <div id="building[<%=building.id%>][controls]">
    <%building.controls.each do |control|%>
      <%=render :partial => "control", :locals => {:control => control}%>

I have the following structure: Site -> Building -> Control. Each
loops through it's collection of items and renders a partial for
each. From Site to Building works just fine. However, going from
Building on to Control throws the template error.

It is noteworthy that Controls get added just fine, and if I refresh
the page, all the code works -- but for some reason when I try to do
the AJAX thing, the partial (not the "rjs" file) throws an error.

Any thoughts? My apologies if this is too vague.


check the location of template . this may be cause .


My apologies. Actually the error is that there is no method named
'controls'. In fact, this is the full error:

ActionView::TemplateError (undefined method `controls' for #<Control:
0x21f61f0>) on line #21 of app/views/site_manager/_building.html.erb:
19: <!--Controls-->
20: <div id="building[<%=building.id%>][controls]">
21: <%for control in building.controls%>
22: <%=render :partial => "control", :locals => {:control =>
23: <%end%>
24: </div>


Rendered rescues/_trace (56.4ms)
Rendered rescues/_request_and_response (1.5ms)
Rendering rescues/layout (internal_server_error)

check for
<%for control in building.controls%>

and make sure controls is defined

~N A R E N

You seem to have Control object itself stored in building variable and hence it does not have any controls method in it

Wow! Yeah, I was aware of what rails *thought* was the issue, but I
was also *sure* I was in the right. Turns out I was wrong. I'd copied
and pasted the "rjs" code into the new "rjs" file. When I did, I
missed the partial name and left it as "building", so it was passing a
"control" object back to the "building" partial when it should have
been passing it to the "control" partial. Thanks so much for letting
me talk out loud!