与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 /文件夹中。
非常感谢任何帮助。感谢。
答案 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停止弹出两次....