I am using Ruby on Rails 3.2.2. I would like to render a show view that should / could be displayed in two different ways depending on a value passed to the related controller action through a parameter. That is, if the parameter is not passed then the show view should be normally rendered else if that value is set to something then the show view should be rendered with some changes (for example, some “embedded” partial templates should change, some information should not be displayed and some other information should be added).
How handle this situation in an efficient / proper way? That is, should I state a conditional rendering in the show controller action and in related views? or should I use a separate controller action so to don’t use / pass the mentioned parameter? or should I implement a “separate” / “dedicated” controller in order to handle my “particular” case?
Note: In my case I would like to display different contents “in a public or private way”.
It depends on how different these representations are. With two different views you’ll end up with certain duplication which can be dealt with by shared partials. If private vs public templates are mostly similar, I’d suggest going with conditionals. You can encapsulate decisions from the beginning by adding helpers which would work like this:
or like this:
But if private vs public representations are vastly different, I’d suggest considering separate controllers. Difference is there for a reason, and will not end at representation.
And for common parts of controllers and views use modules, helpers and shared partials.