Render an alternate partial


#1

I want to render a partial from two different views (class/index;
cohort/index) in order to iterate (?) through the pupils model using
_pupil.html.erb (in the pupils/views directory)

class has many pupils

cohort has many pupils

pupil belongs to class
pupil belongs to cohort

It works well, and the _pupil.html.erb partial is rendered correctly
from both views.

  • But, and this is the thing, I want the pupil partial to be slightly
    different in each case i.e. when it’s called from cohort/index I want
    to display the pupil data in a table, but not when it’s rendered from
    class/index.

How do I go about having two _pupil.html.erb partials without breaking
links between views/controllers/models please?

Thanks

Matt


#2

It works well, and the _pupil.html.erb partial is rendered correctly
from both views.

  • But, and this is the thing, I want the pupil partial to be slightly
    different in each case i.e. when it’s called from cohort/index I want
    to display the pupil data in a table, but not when it’s rendered from
    class/index.

How do I go about having two _pupil.html.erb partials without breaking
links between views/controllers/models please?

Why wouldn’t you just move views/pupils/_pupil.html.erb into views/
class/_pupil.html.erb and views/cohort/_pupil.html.erb and change them
to do what you want? Then update the render :partial calls from the
two calling files to look to their own version?


#3

That’s exactly it. Thank you!

I’ll do it.

What does that bit of rendering code look like. How do I keep the
@cohort.pupils bit but tell it to go to the different directory?

At the moment it looks like this and points to the pupils directory:

<%= render :partial => @cohort.pupils %>

I’m aware this should be obvious but I don’t understand the API docs
on this.


Matt


#4

Sorted it with :collection

Thanks for the tip.