Error handling on ajax form

I have a page displaying a form and a table. The form is used to add
record to the table using ajax.
I am using jQeury for this.
Submitting the form with all fields filled in works just fine, but
when I leave field empty it does not work.
Probably because the jQuery code tries to add a partial (containing
one row) to to the bottom of the table for the new object that could
not be created because fields where empty.

My create action now looks like this:
  def create
    @project = Project.new(params[:project])
    @project.save
    @current_project = @project
    flash[:notice] = 'Successfully created project.'
    respond_to do |format|
      format.js
      format.html { redirect_to projects_url }
    end
  end

What do I have to add to my code in order to get the form validation
to work properly with my ajax form?

I have a page displaying a form and a table. The form is used to add
record to the table using ajax.
I am using jQeury for this.
Submitting the form with all fields filled in works just fine, but
when I leave field empty it does not work.

What does not work? Is the Project not created? Are you getting an
exception (and if so, what is the full exception + backtrace)?

Probably because the jQuery code tries to add a partial (containing
one row) to to the bottom of the table for the new object that could
not be created because fields where empty.

Have you checked the development log to see if extraneous, blank
fields actually are being sent in the POST request?

My create action now looks like this:
def create
@project = Project.new(params[:project])
@project.save
@current_project = @project
flash[:notice] = 'Successfully created project.'
respond_to do |format|
format.js
format.html { redirect_to projects_url }
end
end

You have no error checking in your controller, so if you're wondering
why there's no validation in your app, this is a good place to start.
Read http://guides.rubyonrails.org/activerecord_validations_callbacks.html,
its an excellent Primer for how ActiveRecord validations work and how
to work with them in your controller code and views.

> I have a page displaying a form and a table. The form is used to add
> record to the table using ajax.
> I am using jQeury for this.
> Submitting the form with all fields filled in works just fine, but
> when I leave field empty it does not work.

What does not work? Is the Project not created? Are you getting an
exception (and if so, what is the full exception + backtrace)?

When I submit the empty form nothing happens in the browser. The
project is not created also no exception is raised.
On the project model I defined these validations:
  validates_presence_of :name
  validates_presence_of :description

> Probably because the jQuery code tries to add a partial (containing
> one row) to to the bottom of the table for the new object that could
> not be created because fields where empty.

Have you checked the development log to see if extraneous, blank
fields actually are being sent in the POST request?

Yes, blank fields are send in the POST request.

In the development log i found this:
ActionView::TemplateError (edit_project_url failed to generate from
{:controller=>"projects", :action=>"edit", :id=>#<Project id: nil,
name: "", description: "", created_at: nil, updated_at: nil,
startdate: "2009-10-26", enddate: "2009-10-26">}, expected:
{:controller=>"projects", :action=>"edit"}, diff: {:id=>#<Project id:
nil, name: "", description: "", created_at: nil, updated_at: nil,
startdate: "2009-10-26", enddate: "2009-10-26">}) on line #12 of app/
views/projects/_project.html.erb:
9: <td><%=h project.enddate %></td>
10: <td class="row-nav">
11: <%= link_to "Show", project %>
12: <%= link_to "Edit", edit_project_path(project) %>
13: <%= link_to "Destroy", project, :confirm => 'Are you
sure?', :method => :delete %>
14: </td>
15: </tr>

This is there because my javascript code in create.js.erb that gets
executed on the format.js response tries to render that _project
partial in my view.

> My create action now looks like this:
> def create
> @project = Project.new(params[:project])
> @project.save
> @current_project = @project
> flash[:notice] = 'Successfully created project.'
> respond_to do |format|
> format.js
> format.html { redirect_to projects_url }
> end
> end

You have no error checking in your controller, so if you're wondering
why there's no validation in your app, this is a good place to start.
Readhttp://guides.rubyonrails.org/activerecord_validations_callbacks.html,
its an excellent Primer for how ActiveRecord validations work and how
to work with them in your controller code and views.

Thanks for the link.

Of course I can change the create action something like this:
  def create
    @project = Project.new(params[:project])
    if @project.save
      @current_project = @project
      flash[:notice] = 'Successfully created project.'
      respond_to do |format|
        format.js
        format.html { redirect_to projects_url }
      end
    else
      flash[:notice] = 'Failed to create a new project.'
      render :action => 'index'
    end
  end

But how do I show the validation messages on the index view?
In my view I have this:
<%= error_messages_for :project %>
But it does not show anything when I submit an empty form with the
create action code from just above.
Also the 'Failed to create a new project.' does not show.