每次提交时,DB条目的数量都会翻倍

时间:2015-03-06 21:29:06

标签: javascript jquery ruby-on-rails ajax

与RoR相对较新。使用Rails 4,Foundation,使用AJAX(remote:true)。每次提交条目时,db条目的数量都会翻倍。第一次提交生成两次,第二次提交生成4,第三次生成8,依此类推。表格是一个显示模态。当我在simple_form_for调用中删除remote:true标记时,它只添加一个条目,因此我怀疑它与此有关。我试图弄明白我已经绞尽脑汁待了2天。

这是表单(_form.html.erb)

<%= simple_form_for @applicant_address, remote: true do |f| %>
  <%= f.error_notification %>

  <div class="form-inputs black_label">
    <%= f.hidden_field :applicant_id %>
    <%= f.input :street, :label => "Street Address" %>
    <%= f.input :city %>
    <%= f.input :state %>
    <%= f.input :zip, :label => "Zip Code"  %>
    <%= f.input :length_years, :label => "Years at this address" %>
    <%= f.input :length_months, :label => "Months at this address" %>
  </div>

  <div class="form-actions">
    <%= f.button :submit, :value => "Submit New Address" %>
  </div>
<% end %>

这是控制器(applicant_addreses_controller.erb):

class ApplicantAddressesController < ApplicationController
  before_action :set_applicant_address, only: [:show, :edit, :update, :destroy]

  # GET /applicant_addresses
  # GET /applicant_addresses.json
  def index
    @applicant_addresses = ApplicantAddress.all
  end

  # GET /applicant_addresses/1
  # GET /applicant_addresses/1.json
  def show
  end

  # GET /applicant_addresses/new
  def new
    @applicant_address = ApplicantAddress.new(:applicant_id => params[:applicant_id])
  end

  # GET /applicant_addresses/1/edit
  def edit
  end

  # POST /applicant_addresses
  # POST /applicant_addresses.json
  def create
    @applicant_address = ApplicantAddress.new(applicant_address_params)
    @applicant = @applicant_address.applicant
    @applicant_address.user_id = current_user.id

    respond_to do |format|
      if @applicant_address.save
        format.html { redirect_to applicant_path(@applicant_address.applicant_id) }
        format.json { render :show, status: :created, location: @applicant_address }
        format.js
      else
        format.html { render :new }
        format.json { render json: @applicant_address.errors, status: :unprocessable_entity }
      end
    end
  end

这是js(create.js.erb):

  /* Updating the list with the new data elements */

$("#panel2").html("<%= escape_javascript(render 'applicants/show_addresses', :applicant => @applicant) %>");

  /* Activating Best In Place */

$(document).ready(function() {
  jQuery(".best_in_place").best_in_place();
});


  /* Closing the Modal */

$("#myModal").foundation('reveal','close') 
$(document).foundation();

以下是显示数据的部分列表(_show_addresses.html.erb):

<div class="row application_block">
  <br />
  <h4 data-tooltip aria-haspopup="true" class="has-tip small-12 medium-6 large-6" title="Please list your addresses of residency for the past three years.">Address History</h4>
    <% address_count = @applicant.applicant_addresses.count %>
    <% if address_count == 0 %>
      <% add_text = "Add current address" %>
    <% else %>
      <% add_text = "Add additional addresses" %>
    <% end %>
    <% count = 0 %>
    <div class="row address_row text-center">
      <div class="hide-for-small-only medium-10 medium-offset-1 large-9 large-offset-2 columns">
        <div class="medium-3 large-3 columns">
          <u>Street</u>
        </div>
        <div class="medium-3 large-3 columns">
          <u>City</u>
        </div>
        <div class="medium-1 large-1 columns">
          <u>State</u>
        </div>
        <div class="medium-2 large-2 columns">
          <u>Zip</u>
        </div>
        <div class="medium-3 large-3 columns">
          <div>At Address</div>
          <div class="medium-6 large-6 columns">
            <u>Years</u>
          </div>
          <div class="medium-6 large-6 columns">
            <u>Months</u>
          </div>
        </div>
      </div>  
    </div>        
    <% @applicant.applicant_addresses.order('created_at').each do |p| %>
      <div class="row address_row text-center">
        <div class="small-9 medium-1 large-2  columns">
          <% if count == 0 %>
            <b>Current Address:</b>
          <% else %>
            <b>Previous Address #<%= count %>:</b>
            <% end %>
        </div>
        <div class="show-for-small-only">
          <br />
          <br />
        </div>
        <div class="small-12 medium-10 large-9 columns">
          <div class="small-4 medium-3 large-3  columns">
            <%= best_in_place p, :street, :as => :input, :place_holder => "--------" %> 
          </div>
          <% city_state_zip =  p.city + ", " + p.state + " " + p.zip %>
          <div class="small-4 medium-3 large-3 columns">
            <%= best_in_place p, :city, :as => :input, :place_holder => "------" %>
          </div>
          <div class="small-2 medium-1 large-1 columns">
            <%= best_in_place p, :state, :as => :input, :place_holder => "--" %>
          </div>
          <div class="small-2 medium-2 large-2 columns">
            <%= best_in_place p, :zip, :as => :input, :place_holder => "-----" %>
          </div>
          <div class="row show-for-small-only">
            <br />
            <br />
          </div>
          <div class="row show-for-small-only">
            <div class="small-12 columns">
              At Address
              <br />
              <div class="small-3 small-offset-3 columns">
                <u>Years</u>
              </div>
              <div class="small-3 columns end">
                <u>Months</u>
              </div>
            </div>
          </div>
          <div class="small-12 medium-3 large-3 columns">
            <div class="small-3 small-offset-3 medium-6 medium-offset-0 large-6 large-offset-0 columns">
              <%= best_in_place p, :length_years %>
            </div>
            <div class="small-3 medium-6 large-6 columns">
              <%= best_in_place p, :length_months %>
            </div>
          </div>
        </div>
        <div class="small-3 medium-1 large-1  columns trash">
          <%= link_to image_tag("trash_recyclebin.png"), applicant_address_path(p.id), :method => :delete, :remote => true %>
        </div>
      </div>
      <% count = count + 1 %>

      <div class="show-for-small-only">
        <hr />
      </div>
    <% end %>

    <br />
    <br />

    <div class="columns">
      <%= link_to add_text, new_applicant_address_path(:applicant_id => @applicant.id), data: {:"reveal-id" => "myModal", :"reveal-ajax" => true } %>
    </div>

    <br />
    <br />          
</div>

值得注意的是......删除行完美无缺。

此外,我的文件夹中只有application.js文件,它位于assets / javascripts /文件夹中。

非常感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:1)

验证您的application.js文件是否包含对jquery_ujs和rails_ujs的引用。如果两者都存在,则删除jquery_ujs。

当我遇到此问题时,删除工作正常,但我也遇到了双重删除确认。这个问题在同样的修复中得到了缓解。通过删除jquery_ujs引用,问题就消失了。

这个答案不是我自己的。实际上,我在阅读此条目后修复了此问题:link-to-confirm-displays-popup-twice

answer中的评论有助于:

  

...删除在其中复制的jquery_ujs   来自application.js的rails_ujs停止弹出两次....