Rails 3 render partial

The following rails 2.3.x code is not working in rails 3 beta 4:

def
render_crud_table(obj,controller_name,columns,search_fields_array,status_array,actions)
render :partial => ‘shared/crud_maint_table’, :object => obj,
:locals => {:controller_name => controller_name, :columns =>
columns, :search_fields_array => search_fields_array, :status_array =>
status_array, :actions => actions}
end

The partial _crud_maint_table in the shared folder has this code
snippet:

  • crud_maint_table.each do |a_rec|
    %tr{ :class => cycle(“odd”,“even”) }
    • columns.each_with_index do |col, i|
      %td{ :class => (i == 0 ? ‘first’ : nil) }

See the crud_maint_table.each loop? That works in rails 2.3.x but not
in rails 3.
Please advise.
thanks.
Bharat

Bharat R. wrote:

The following rails 2.3.x code is not working in rails 3 beta 4:

def
render_crud_table(obj,controller_name,columns,search_fields_array,status_array,actions)
render :partial => ‘shared/crud_maint_table’, :object => obj,
:locals => {:controller_name => controller_name, :columns =>
columns, :search_fields_array => search_fields_array, :status_array =>
status_array, :actions => actions}
end

The partial _crud_maint_table in the shared folder has this code
snippet:

  • crud_maint_table.each do |a_rec|
    %tr{ :class => cycle(“odd”,“even”) }
    • columns.each_with_index do |col, i|
      %td{ :class => (i == 0 ? ‘first’ : nil) }

See the crud_maint_table.each loop? That works in rails 2.3.x but not
in rails 3.
Please advise.
thanks.
Bharat

Well,I met the same problem.
I had some debug, it seems that rails treat :object as :collection, so
the crud_maint_table actually is the first element of the array obj.
I’m not sure it’s a bug or sth changed since 3 and I haven’t found any
solution

those are the classes you are forgeting to call a property in the view,

seems like you are doing this

<%= @tutors.each do |tutor|%>
<%= tutor%>

it should be

<%= @tutors.each do |tutor|%>
<%= tutor.name %>

Zhuhao Wang wrote:

Bharat R. wrote:

The following rails 2.3.x code is not working in rails 3 beta 4:

def
render_crud_table(obj,controller_name,columns,search_fields_array,status_array,actions)
render :partial => ‘shared/crud_maint_table’, :object => obj,
:locals => {:controller_name => controller_name, :columns =>
columns, :search_fields_array => search_fields_array, :status_array =>
status_array, :actions => actions}
end

The partial _crud_maint_table in the shared folder has this code
snippet:

  • crud_maint_table.each do |a_rec|
    %tr{ :class => cycle(“odd”,“even”) }
    • columns.each_with_index do |col, i|
      %td{ :class => (i == 0 ? ‘first’ : nil) }

See the crud_maint_table.each loop? That works in rails 2.3.x but not
in rails 3.
Please advise.
thanks.
Bharat

Well,I met the same problem.
I had some debug, it seems that rails treat :object as :collection, so
the crud_maint_table actually is the first element of the array obj.
I’m not sure it’s a bug or sth changed since 3 and I haven’t found any
solution

When I tried to use :locals, there are some strange text:

#Tutor:0xd3065c0#Tutor:0xd2e32b0#Tutor:0xd2e3250#Tutor:0xd2e3118#Tutor:0xd2e30b8#Tutor:0xd2e3058#Tutor:0xd2e2ff8#Tutor:0xd2e2f98#Tutor:0xd2e2f38#Tutor:0xd2e2ea8#Tutor:0xd2e2d40#Tutor:0xd2e2cc8#Tutor:0xd2e2c08#Tutor:0xd2e2b78#Tutor:0xd2e2b18

before the content of the partial ,seems like the ID of the elements of
the array I passed in…can’t get rid of it…

radhames brito wrote:

those are the classes you are forgeting to call a property in the view,

seems like you are doing this

<%= @tutors.each do |tutor|%>
<%= tutor%>

it should be

<%= @tutors.each do |tutor|%>
<%= tutor.name %>

I tried,

<%= @tutors.each do |tutor|%>

this line should be

<% @tutors.each do |tutor|%>

fix this,thx

I also find an artical
Getting Up To Speed With Rails 3 says
:object is removed,but you can find an offcial artical here
Layouts and Rendering in Rails — Ruby on Rails Guides which says
:object is still what I expect…

What was the problem? how did you solve it?

surely, got confused there.

Hello,
You are right about the object deprecation in Rails 3. I solved the
problem the same way you did. Instead of passing the table name in
object. I now pass it in the locals hash.
Hope this helps.
Bharat

radhames brito wrote:

What was the problem? how did you solve it?

render :partial =>‘sth’,:object => @sth

is not working in rails 3,it pass the first element of the array
@sth(I’m not sure what would happen if @sth is not an array),thus you
can’t call each in the template.You have to use :locals =>{:sth
=>@sth}.Seems a little complicated,is it a bug or some change not
mentioned in the changelog?

Before I realize this I changed the view a little,added <%= Tutor.each
…%>,and got that text.

change this
render :partial =>‘sth’,:object => @sth

to this , and call the array in the controller like this @sths
then create a partial with the singular , _sth.html.erb

render :partial =>@sths

i always do it that way and works perfectly