I am no expert on Rails or Rest by any means. But I would presume following guidelines while coding myself.
- Treat everything as resource and adhere to rest style of modifications/view on resource. So that means show gets one the record to show, index will get all, a post will create new, put will edit and delete will destroy.
- As far as view is concerned about whether whole form needs to be displayed or not; it's a view responsibility. In strict sense, a controller's job is to route to right model and back to right view. Any other logic apart from the format to render and some other trivial stuff; would not belong to controller.
- If you were to decide whether whole form is to be displayed or only one field; then that decision should be taken up by your view. (JS could play a big role there as with jquery and likes being used comprehensively; it's possible to have stronger control on client side over your view). controller would probably call update_attributes on model and that would give you flexibility in terms of how many attributes you want to update.
- Permission logic should be restricted to model and based on permission, only selective data should be served.
I have a specific approach that I like in all my web apps. As long as possible JSON should be used between views and controllers. This has two fold advantage; it very well decouples the role of view and controller and saves any un-intentional overlapping.
It lets you expose your controllers as APIs to whole world and re-use them efficiently. (apart from some permission/access related filtering that may be req.)
- Associated resources can be updated with nested REST style of updates. I like that particular style but like to keep the depth of resource shallow.
Even a single flag can be updated with same REST action of update just that you call update_attributes method. you really need not put everything as a parameter in URL.
I just believe, that to use the rail's architecture to it's max potential; you just have to have the right design in place and it's always one way or other possible to stay within REST paradigm and rails conventions.
If you could provide any piece of code; where you feel that they will be violated; then please share and maybe we all can suggest improvements in design.
Cheers