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
On Mar 13, 11:42am, Erwin [email protected] wrote:
%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’
On Mar 13, 1:28pm, Erwin [email protected] wrote:
%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 !!
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…
On Sun, Mar 13, 2011 at 4:42 AM, Erwin [email protected] wrote:
%td= @object
%td= link_to........
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.
–
make haste slowly
festina lente \
mobile +1_415_632_6001
[email protected] [email protected]
http://robotarmyma.de