我有Client
模型和Contact
模型。在客户端页面上,我将"添加到联系人"按钮将其保存在contact
模型上。
我的客户端页面上有以下代码:
= form_for(@contact, remote: true, html: { class: 'form-horizontal ajax-form add-to-contact', style: 'margin-bottom: 0;', 'data-model-name' => 'contact'}) do |f|
= f.text_field :type, :value => 'clients'
= f.text_field :client_id, :value => client.id
= f.submit "Add to Contact", class: 'btn btn-success btn-submit-add-to-contact'
clients_controler.rb
def index
@contact = Contact.new(params[:client_id], params[:type])
end
contacts_controller.rb
def create
@contact = Contact.new(contact_params)
respond_to do |format|
if @contact.save
format.js {}
else
format.json { render json: @contact.errors, status: :unprocessable_entity }
end
end
end
我有coffeesript代码,当我提交它时,它将保存到contact
模型:
$(document).on "click", ".btn-submit-add-to-contact", ->
$(this).prop "disabled", true
$(this).val "Added to Contacts!"
$(".add-to-contact").submit()
但是存储方面存在问题。虽然我没有提交其他客户,但我的所有客户都会保存,因为他们会循环并自动保存。请帮忙。
答案 0 :(得分:0)
如果要添加自己的Ajax功能,则应删除remote: true
。
此外,您应该阻止默认的单击操作,否则浏览器将提交表单两次。
$(document).on "click", ".btn-submit-add-to-contact", ->(e)
$(this).prop "disabled", true
$(this).val "Added to Contacts!"
$(".add-to-contact").submit()
e.preventDefault()
如果您使用的是jquery-ujs,则应该听取已完成的ajax调用:
$(document).ready ->
$("form").on("ajax:success", (e, data, status, xhr) ->
答案 1 :(得分:0)
我明白了。
我修改了我的JS:
$(document).on "click", ".btn-submit-add-to-contact", ->
$(this).prop "disabled", true
$(this).val "Added to Contacts!"
contact_form = $(this).closest('.add-to-contact-form').find('.ajax-form')
contact_form.submit()
return
我把课程放在我的表格之前:
.add-to-contact-form
= form_for(@contact, remote: true, html: { class: 'form-horizontal ajax-form add-to-contact', style: 'margin-bottom: 0;', 'data-model-name' => 'contact'}) do |f|
= f.text_field :type, :value => 'clients'
= f.text_field :client_id, :value => client.id
= f.submit "Add to Contact", class: 'btn btn-success btn-submit-add-to-contact'
我使用.closest
,它对我很好。
谢谢你的帮助!