Does not validate presence of entry fields


#1

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| %>

Please send your message:

Your N.:
<%= f.text_field :name, :size => 25 %>

Your email:
<%= f.text_field :email, :size => 25 %>

Message:
<%= f.text_area :body, :rows => 10, :cols => 30 %>

<%= submit_tag 'Submit' %>

<% end %>

Create view

Thank you for your interest in my site

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

thanks


#2

Your N.:
<%= f.text_field :name, :size => 25

Create view

Thank you for your interest in my site

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


#3

thanks!!!