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
http://darwinweb.net/articles/getting-up-to-speed-with-rails-3 says
:object is removed,but you can find an offcial artical here
http://edgeguides.rubyonrails.org/layouts_and_rendering.html 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