form remote only if new record.

I want submit a form via ajax only if i have a new record, so I've set: (I'm using simple_form)

= simple_form_for @document, :html => { :multipart => true }, :remote => @document.new_record? ? true : false, do |f|   = render 'shared/error_messages', :object => @document

  = field_set_tag t('document') do     .block       .column.span-24         .inputs           = f.input :name           = f.input :description           = f.input :doc, :as => :file           = f.input :company_id, :input_html => { :value => params[:company_id] }, :as => :hidden if @document.new_record?

    .actions       = f.button :submit

It works if the validations are all ok but if a validation fails, I correct the error and then submit again, remote is no longer valid because, I think, new_record? return false. Isn't it?

I want submit a form via ajax only if i have a new record, so I’ve set:

(I’m using simple_form)

= simple_form_for @document, :html => { :multipart => true }, :remote

=> @document.new_record? ? true : false, do |f|

= render ‘shared/error_messages’, :object => @document

= field_set_tag t(‘document’) do

.block

  .column.span-24

    .inputs

      = f.input :name

      = f.input :description

      = f.input :doc, :as => :file

      = f.input :company_id, :input_html => { :value =>

params[:company_id] }, :as => :hidden if @document.new_record?

.actions

  = f.button :submit

It works if the validations are all ok but if a validation fails, I

correct the error and then submit again, remote is no longer valid

because, I think, new_record? return false.

nope. if @document is not saved, then @document.new_record? should

still return true. When you say you correct the error, you’re submitting the

same form right? without page reload since you’re submitting via ajax so

the form should still submit via ajax.

I have strange behaviors. As you see the form has remote => true if model is a new record. But when I call submit the form is not submited via ajax. The controller respond_to :js and I have new.js.erb and create.js.erb files. Perhaps the multipart create a problem?

I want submit a form via ajax only if i have a new record, so I’ve set:

(I’m using simple_form)

= simple_form_for @document, :html => { :multipart => true }, :remote

=> @document.new_record? ? true : false, do |f|

= render ‘shared/error_messages’, :object => @document

= field_set_tag t(‘document’) do

.block

 .column.span-24
   .inputs
     = f.input :name
     = f.input :description
     = f.input :doc, :as => :file
     = f.input :company_id, :input_html => { :value =>

params[:company_id] }, :as => :hidden if @document.new_record?

.actions

 = f.button :submit

It works if the validations are all ok but if a validation fails, I

correct the error and then submit again, remote is no longer valid

because, I think, new_record? return false.

nope. if @document is not saved, then @document.new_record? should

still return true. When you say you correct the error, you’re submitting

the

same form right? without page reload since you’re submitting via ajax so

the form should still submit via ajax.

I have strange behaviors.

As you see the form has remote => true if model is a new record.

But when I call submit the form is not submited via ajax.

The controller respond_to :js and I have new.js.erb and create.js.erb files.

Perhaps the multipart create a problem?

I didn’t read the code carefully but I think the :remote key-value pair should go inside the :html hash

Let me know if that submits your form via ajax.

I've changed to:

= simple_form_for @document, :html => { :multipart => true, :remote => @document.new_record? ? true : false} do |f|   = render 'shared/error_messages', :object => @document

  = field_set_tag t('document') do     .block       .column.span-24         .inputs           = f.input :name           = f.input :description           = f.input :doc, :as => :file           = f.input :company_id, :input_html => { :value => params[:company_id] }, :as => :hidden if @document.new_record?

    .actions       = f.button :submit

but still doesn't work via ajax.

I've noticed that if I don't fill the file field then if I create a new document but without attaching any file then ajax works. If I attach a file in the file field then ajax doesn't work.

I seems that traditional upload does not work via ajax. I've resolved via remotipart gem. http://www.alfajango.com/blog/remotipart-rails-gem/

Files can't be sent over ajax. There is the iframe trick which looks like ajax (in that there is no full page reload) but is in fact just a 'normal' form submission. Some js libraries (e.g. jquery.form if my memory is correct) will even do this automatically for you.

Fred

I've resolved with remotipart gem.