Rails - 从其他模块保存新数据

时间:2014-10-09 11:07:33

标签: ruby-on-rails ruby coffeescript

我有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()

但是存储方面存在问题。虽然我没有提交其他客户,但我的所有客户都会保存,因为他们会循环并自动保存。请帮忙。

2 个答案:

答案 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,它对我很好。 谢谢你的帮助!