Render an alternate partial

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

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?

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

Sorted it with :collection

Thanks for the tip.