Forum: Ruby on Rails If else statments for errors within controller methods

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
David (Guest)
on 2009-03-15 07:47
(Received via mailing list)
When I first started learning ruby on rails I wrote my controller
actions by using if else statements to display error messages in case
something failed a validation. Like:

  flash[:notice] = "User was saved"
  redirect_to whatever
  flash[:error] = "There was an error saving the user"

Im trying to use the beast forum plugin and in the controller actions
there are no if else statements and it looks really clean.  like it
just has:

  def create
    @forum.attributes = params[:forum]!

Im wondering, does it just rely on validations for the error
handling?  And if so, is this good practice?
Phlip (Guest)
on 2009-03-15 07:59
(Received via mailing list)
David wrote:

> Im wondering, does it just rely on validations for the error
> handling?  And if so, is this good practice?

The second one is user-hostile.

Roughly speaking, all tests, and some low-level code, should use save!.
raises an error, which you ought to rescue.

The first example does not raise, and it does tell the user something
wrong. However...

The best version tells the user what model's .errors collection now
holds. The
first example may have put the correct code to do that, in the View,
under where
it probably output the flash[:error].
"Wolas!" (Guest)
on 2009-03-16 13:37
(Received via mailing list)
Also, the redirects when saving/updating a model generally change. If
something went wrong, then you (usually) want to redirect to an edit/
mew page whilst if it actually saved it you want to go to the show.
Now this is not always true and with (for example) some models you are
going to go to the same page in both cases.

Nevertheless, the second way (no if...else...) you will have tor escue
the exception that can be thrown if the model is invalid. this will
have to be done in ApplicationController, and you would need to
abstract all as one method (or call a method depending on request.path
which is a bad bad idea) so you would have really unusefull error
messages like "something went wrong")
This topic is locked and can not be replied to.