Mauro
(Mauro)
November 18, 2011, 12:01pm
1
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.
Mauro
(Mauro)
November 18, 2011, 12:25pm
3
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.
Mauro
(Mauro)
November 18, 2011, 5:13pm
5
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.
Mauro
(Mauro)
November 18, 2011, 5:28pm
6
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.
Mauro
(Mauro)
November 18, 2011, 5:45pm
7
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
Mauro
(Mauro)
November 18, 2011, 10:52pm
9
I've resolved with remotipart gem.