How does form validation works on restful controllers

Hi all,

Let's assume I have a calendar show view (calendar controller). On that view you can view a calendar with all its events. You can also add, edit and delete events (via the events controller) on that same view.

Let's assume the user creates a new event but forgets to fill in some data and the validation (and insert operation) fails. You want to use the render :action => 'calendars/show' method to show the validation error on the form in the calendar controller.

The problem I'm facing is that when you render the calendar view you need other variables (like all the events of the calendar). Of course you can add @events = Event.find(:all) in the create method of the events controller but in my opinion this completely ruins the restful philosophy: your create method isn't a real create method anymore, it has also become an index method.

I'm really interested in your opinion and how you design your controllers to solve this problem.

Many thanks in advance. Stijn

This is one of those fundamental design issues that some people might argue I get wrong.

I would put the event handling, editing, and all that in the calendar controller.

Why? Because events don't really live outside that context. They are modified through the calendar the user sees, and they are displayed on it. Sure, there are event lists that you might have outside it, but isn't a list of events just a schedule, which is another form of calendar?

In my code, I have "users", "toons", and "avatars" -- the Avatar is a small picture that is specific to a Toon. I put all the avatar logic in toon_controller.rb, since modifying a toon is done along the same lines as modifying the Toon attributes of level, class, etc. From a user's point of view, and from mine, an Avatar is just another attribute on a Toon.

When I think of a calendar, I think of events on it. I don't think of an event standing alone, I think of it as something that occurs on a specific day and time, which is a calendar.

--Michael