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 Ruparel 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

Zhuhao Wang wrote:

Bharat Ruparel 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.............

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](http://tutor.name) %>

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.......

surely, got confused there.

What was the problem? how did you solve it?

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