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:
if @user.save
flash[:notice] = "User was saved"
redirect_to whatever
else
flash[:error] = "There was an error saving the user"
end
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]
@forum.save!
....
end
Im wondering, does it just rely on validations for the error
handling? And if so, is this good practice?
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:
if @user.save
flash[:notice] = "User was saved"
redirect_to whatever
else
flash[:error] = "There was an error saving the user"
end
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]
@forum.save!
....
end
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!. That raises an error, which you ought to rescue.
The first example does not raise, and it does tell the user something went 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].
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")