On 26 okt, 20:57, pharrington
<xenogene...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
wrote:> On Oct 26, 2:12 pm, Ronald
<ronaldvane...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
>
> > 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.