Does not validate presence of entry fields

Hi all

I wrote a small form and I am trying to check if the fields are populated.

My Model is: class Contact < ActiveRecord::Base   validates_presence_of :name, :email, :body validates_length_of :body, :maximum =>2000 end

-----Controller class ContactController < ApplicationController def new      @contact = Contact.new   end def create    @contact = Contact.new(params[:contact])   @contact.save end end

------Viewers

New view

<%= error_messages_for :contact %>

<% form_for @contact, :url => { :action => 'create' }, :html => { :method => :post } do |f| %> <fieldset> <legend>Please send your message: </legend> <p><label>Your Name:<br /><%= f.text_field :name, :size => 25 %></label></p> <p><label>Your email:<br /> <%= f.text_field :email, :size => 25 %></label></p> <p><label>Message:<br /><%= f.text_area :body, :rows => 10, :cols => 30 %></label></p> <p><label><%= submit_tag 'Submit' %> </label></p> </fieldset> <% end %>

Create view <h2>Thank you for your interest in my site</h2>

When the entry fields are not populated the forms shows the create view and does not show any error message. why?

Because you aren't doing anything in the create action to adjust the result if there is a failure. You want something more like this:

def create    @contact = Contact.new(params[:contact])    unless @contact.save      render :action => 'new'      return    end end

Or this which is pretty close to the default generated by Rails scaffolding.

   def create      @contact = Contact.new(params[:contact])

     if @contact.save        flash[:notice] = 'Contact was successfully created.'        redirect_to(contact_path(@contact))      else        render :action => "new"      end    end

thanks!!!