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