Form validation/errors not working.

Hello. I'm trying to create a form. It has only a username and a
password field.

The validation methods, such as validates_presence_of, aren't working.
Does anyone know why?

According to the API, you will need to do seperate validations. This
is due to the fact that if there's a comma after name, it expects an
option. :password is not an option.

So:
class User < ActiveRecord::Base
        validates_presence_of :name
        validates_presence_of :password
end

Hope this helps! If it doesn't, please check back.

Kind regards,
Jaap Haagmans
w. http://www.relywebsolutions.nl

Now it doesn't submit with blank password.

But it doesn't display the errors... Do you know why?

Ilan,

Before, it didn't worked because the form was submitted even with the
password field blank.

Now, the problem is that the errors don't appear.

He might be saving it twice because turning an empty string into MD5
will give an MD5 hash as well. I'm not sure whether that's also the
case in Rails, but it is in PHP. Doing an if with the empty password
will give an error and not save it at all. Doing an if with a password
string will save it and then re-save the altered string.

Now, the problem is that the errors don't appear.

Where is it that they don't appear? In your log? Because that sounds
strange to me. It should say something, even if it's actually saving
everything.

It doesn't give an error in your view because you don't send any
errors to your view:

else
  render :action => "new"
end

It does send you back to the "new" view however. Does that happen? If
you want it to show an error, you should actually send an error to the
view.

Yes, it goes to the view, but the errors doesn't appear in the view...
How do I send them?

You might want to try something like this:

else
  flash[:warning] = @user.errors.full_messages.join("<br />")
  render :action => "new"
end

and put <%= flash[:warning] %> somewhere in your view.

There's also a way to get your model validations to show in the form,
but I don't have an example of how to do such a thing. Of course,
@user.errors will also be sent to your view if you don't specify the
flash like I did above, but I like this way more because you will be
able to re-use this solution or even include the flash somewhere in
your layout.

Hope this helps!

Kind regards,
Jaap Haagmans
w. http://www.relywebsolutions.nl