How to do it the rest way ? Question from fledgeling Ruby programmer

There is no need for a separate controller, one way would be to handle it within the flights controller Edit action, using a url parameter or the Submit button name to indicate that cancel is required rather than edit. However, REST should not be treated as a religion to which all requirements must bow. I would say there is nothing wrong with what you have done (provided that you have used a POST to do it).

Colin

Colin Law wrote in post #1109974:

There is no need for a separate controller, one way would be to handle it within the flights controller Edit action, using a url parameter or the Submit button name to indicate that cancel is required rather than edit. However, REST should not be treated as a religion to which all requirements must bow. I would say there is nothing wrong with what you have done (provided that you have used a POST to do it).

Don't you mean PATCH/PUT rather than POST? POST would indicate you are creating a new flight on the collection of flights, rather than changing the state of an existing flight. Sure POST would work (and technically PATH/PUT is simulated using a POST), but using PATCH/PUT would be more conventional in a RESTful application.

I agree it seems to be overkill in this case to create a separate controller. I see nothing wrong with adding a "cancel" method to the flight controller.

Having additional methods in a controller isn't un-RESTful IMHO. You have a URL (http://example.com/flights/1/cancel) that represents a change (PATCH/PUT) to an existing resource. What's un-RESTful about that?

If I were designing a system like this I would most likely implement my "Flight" model as a finite-state machine and use additional controller actions (along with the 7 default ones) to transition the flights through their various states.

Colin Law wrote in post #1109974:

There is no need for a separate controller, one way would be to handle it within the flights controller Edit action, using a url parameter or the Submit button name to indicate that cancel is required rather than edit. However, REST should not be treated as a religion to which all requirements must bow. I would say there is nothing wrong with what you have done (provided that you have used a POST to do it).

Don't you mean PATCH/PUT rather than POST? POST would indicate you are creating a new flight on the collection of flights, rather than changing the state of an existing flight. Sure POST would work (and technically PATH/PUT is simulated using a POST), but using PATCH/PUT would be more conventional in a RESTful application.

Yes, I was speaking loosely (which is a cardinal sin) and using POST to mean one of the set of non-GET verbs. I am showing my age, going back to the days when there were only the two options.

Colin

Colin Law wrote in post #1109983: