On Jun 26, 2012, at 6:23 PM, cyber c. wrote:
Hi Walter,
The validate* methods works fine on the console. The function
object.valid? returns false if any of the validate method fails. For
that case object.valid? returns false even in the controller function,
but when i redirect to the same url, it doesn’t show any errors from the
code
The errors are set in the event loop of reading the form submission and
showing the results, but when you redirect, you start a new loop, and so
unless you disrupt the cycle you seem to have set for yourself, you’re
never going to see those errors, because the errors – and I suspect the
object – does not exist in the context of the page you redirected to.
In a normal scaffold controller, you will see this pattern:
def new
@my_model = MyModel.new(params[:my_model])
end
def create
@my_model = MyModel.new(params[:my_model])
if @my_model.save
redirect_to some_route(@my_model), :notice => ‘Yay!’
else
render :action => ‘new’
end
end
If both sides of your test for save are redirects, then you have to set
the :warn or :error flash to your errors, because they will not persist
after the redirect. Especially because you’re using Active Model, but
particularly because you’re in a #create method – each time that runs,
the model instance is created fresh from the supplied parameters, and it
forgets all about the botched save.
It’s what I use, it may be out of date, since I am using Rails 3.0 for
this app that I copied it from. I believe that some of this was
streamlined in 3.2. But I am also sure that you have to use /some/ sort
of code to indicate where you want your errors to appear on your
application layout file.
Walter