undefined method `model_name in partial .. passing an Array as a collection

In the controller , I am passing an Array as a collection
@objects = ["item1", "item2", "item3", "item4"]

in the view I wrote
%table#objects
    = render :partial => 'object', :collection => @objects

and in my partial _object.html
= content_tag_for(:tr, @object) do
  %td= @object
  %td= link_to........

but I got an error : undefined method `model_name' for NilClass:Class
for the #object in the content_tag

@object is not not a class..... (yet) I just to want to test on an
Array of string .... anyway of doing such thing ?

thanks for your feedback

In the controller , I am passing an Array as a collection
@objects = ["item1", "item2", "item3", "item4"]

in the view I wrote
%table#objects
= render :partial => 'object', :collection => @objects

and in my partial _object.html
= content_tag_for(:tr, @object) do
%td= @object
%td= link_to........

but I got an error : undefined method `model_name' for NilClass:Class
for the #object in the content_tag

@object is not not a class..... (yet) I just to want to test on an
Array of string .... anyway of doing such thing ?

@object isn't set - you should be using object (since that's what
render will be filling with the items from @objects

Fred

Thanks fred.. I tried with object but same error.. it seems
model_name_from_record_or_class is needed when using collection
I may have to change the partial rendering ... ?

-- trace
activemodel (3.0.4) lib/active_model/naming.rb:94:in
`model_name_from_record_or_class'
activemodel (3.0.4) lib/active_model/naming.rb:81:in `singular'
actionpack (3.0.4) lib/action_controller/record_identifier.rb:49:in
`dom_class'
actionpack (3.0.4) lib/action_view/helpers/record_tag_helper.rb:58:in
`content_tag_for'
app/views/admin/remote_lockers/_object.html.haml:1:in
`_app_views_admin_remote_lockers__object_html_haml__3334574884651529235_2179828200_2175116202532159367'
actionpack (3.0.4) lib/action_view/template.rb:135:in `block in
render'
activesupport (3.0.4) lib/active_support/notifications.rb:54:in
`instrument'
actionpack (3.0.4) lib/action_view/template.rb:127:in `render'
actionpack (3.0.4) lib/action_view/render/partials.rb:300:in `block in
collection_with_template'
actionpack (3.0.4) lib/action_view/render/partials.rb:297:in `each'
actionpack (3.0.4) lib/action_view/render/partials.rb:297:in
`collection_with_template'
actionpack (3.0.4) lib/action_view/render/partials.rb:280:in
`render_collection'

to avoid being confused with 'object' litteral .. I modified the test
code as following :

#lockers
  %table#items
    = render :partial => 'item', :collection => ['foo', 'bar', 'baz']

and the _item partial

= content_tag_for(:tr, item) do
  %td= item

this time , the error is : undefined method `model_name' for
String:Class

I believe there is something wrong with the content_tag_for...

to avoid being confused with 'object' litteral .. I modified the test
code as following :

#lockers
%table#items
= render :partial => 'item', :collection => ['foo', 'bar', 'baz']

and the _item partial

= content_tag_for(:tr, item) do
%td= item

this time , the error is : undefined method `model_name' for
String:Class

I believe there is something wrong with the content_tag_for...

Oops, hadn't spotted that you were using content_tag for as opposed to
content_tag. The entire point of content_tag_for is that you give it
an activemodel like object and it will set the dom id & css class
appropriately.
If you don't have such objects (eg you have strings instead), then
don't use content_tag_for. content_tag might be what you're looking
for.

Fred

thanks you confirm it .. I noticed it as I change my test code using
the array as the collection ....
it's fine now ... using content_tag obvious thing doesn't appears at
first glance !!

you are using the partial in the wrong way.

when you use :collection => @objects

it will pass each element of the collection into the partial and create ‘object’ which is created based

on the name of the partial ‘_name’. the same thing happens with

:partial ‘thing’, :object => Thing.new

_thing.haml

= thing # this is the :object, based on the name

also call your partial .haml if it is haml.