DRY views / Shared Partials and user role based system.

I have a simple partial, just a file list.

The list is exactly the same for those who have permission to change
it, and those who just can see it.

The best way to keep things DRY, I think, is doing some kind of shared
partial. No problem so far.

But what about the specific actions (new/edit/delete)? Scattering some
conditional statements seems very very uglier, and even more difficult
to maintain, than separate views. So I came up with another solution:
putting some yield statements on the code. Something like, "yield
:delete" for example. Than I render a partial that contains only the
user specific things, and put the content_for's that are appropriated.

But I think that can be even a prettier solution. So I'm asking you guys :smiley:
Sorry, if this is a newbie question, I'm new to rails, and concerned
about doing things the best way possible.

Thanks in advance

bad solution, rendering or not the link doesnot hide th action, that means with a tool like curl a user can trigger the delete or just writing the link in the browser and changing the method, use an authorization gem , read about cancan,


whe you have is an authorization problem.

Sorry, My controller actions are already restricted based on the user
type (I use authlogic). I'm not restricting anything on the view. It's
not possible to do something as a normal user, even if the links/forms
were there. I just wan't to render the view differently for each one,
but keeping things more DRY (since the list is almost about the same
for each user) and without ugly conditional statements.

But sorry, I was warned to post this kind of doubt on the other mail
list: 'rails-talk', not here. Newbie behavior :smiley:
Thanks for the answer.

you can use a layout partial


Hey Seb,

too much decider code in partials? Use Cells [1], that's view
components for Rails and designed to solve problems like yours.
Check out some examples at github [2] and be sure to use view
inheritance [3], which could be very handy to map all your different
user roles in your views.

If you get stuck, feel free to ask us on irc.freenode.org in the
#cells channel or mail me directly.



[1] http://cells.rubyforge.org/
[2] http://github.com/apotonick/cells
[3] http://apotomo.de/2010/04/using-cells-view-inheritance-to-clean-up-your-views/