render :partial => @object

Running rails 2.1.0 when I do this:

<%= render :partial => 'style', :collection => @styles %>

I get the collection fine in my index file. When I try the shortcut:

<%= render :partial @styles %>

I get this error:

Couldn't find template file for active_record/named_scope/scopes/
_scope

Any ideas??

Add a comma or not?
<%=render :partial, @styles %>

renders nothing.

<%=render :partial=>@styles %>
the partial html is :
_style.html.erb
and the object can be used in the partial erb is style

ya that is what I have.

ya that is what I have.

<%=render :partial=>@styles %>
the partial html is :
_style.html.erb
and the object can be used in the partial erb is style

renders nothing.

You could use ruby-debug to break into the partial to check it is
getting there. Another thing to do is to check the html produced
(view source in browser) to check that it is in fact generating
nothing, rather than just nothing that displays.

Presumably you have checked that @styles is not empty?

Colin

Ya if I change it to the normal :collection style syntax it works fine.

Ya if I change it to the normal :collection style syntax it works fine.

Ah, I see, I had misunderstood the problem. Is @styles an array of
Style objects, and are you rendering from the style controller? Where
is _style.html.erb?

What version of Rails are you using? I don't know what version that
syntax appeared. Anyone?

Colin

Everything is in the styles views directory. rails 2.1.0. I am very confused as this sytnax is supposed to be supported by rails > 2.0. I even tried it in 2.3.2 and the same thing. I watched ryan bates railscasts about 4 times and I still do not know why it is not working.

This works fine:

<%= render :partial => ‘style’, :collection => @styles %>

Which is even more bewildering.

Is there something I'm not getting here? The short form should be
either

render :partial => @foo

-or-

render @foo

I've never seen "render :partial @foo"

-eric

Is there something I'm not getting here? The short form should be
either

render :partial => @foo

-or-

render @foo

I've never seen "render :partial @foo"

OP you have changed it to
<%=render :partial=>@styles %>
as pointed out by Wang Pengcheng?

Colin

Hi, what version of Rails is being defined within the environment.rb file?

-Conrad

2.1.0

Hi,

if you’re using Rails 2.1.0 or earlier, you’ll need to use the following syntax:

a) render :partial => partial_name, :collection => @collections

Note: The above requires the partial, _partial_name.html.erb.

b) render :partial => partial_name, :object => @object

Note: The above requires the partial, _partial_name.html.erb.

If you’re using Rails 2.2.2 or greater, then you can use the following

syntax:

a) render :partial => @collections

Note: The above uses the partial, _collection.html.erb.

b) render :partial => @object

Note: The above used the partial, _object.html.erb.

Good luck,

-Conrad