Jquery Rails 3 ...表单提交两次...删除两次...帮助

时间:2011-07-19 12:37:10

标签: jquery ruby-on-rails ruby-on-rails-3 form-submit

似乎eveyone有这个问题,但没有人有一个非专业人士的条款答案,甚至没有适当的解决方案。

我有一个使用ajax提交表单的表单,并自动将其添加到文本字段下方的列表中。表单提交两次,因此我有两个相同的(除了ID)记录。更糟糕的是当你试图删除它时不会更新页面,因为它试图删除相同的记录两次。

我希望有人在那里有一个很好的答案...... 顺便说一句我是铁杆的新手。 代码:

index.html.erb

<h1>SSCC</h1>
<div id="orderline_form">
    <%= render 'form' %>
</div>

<ul id="orderlines">
    <%= render :partial => @orderlines.reverse %>
</ul>

_form.html.erb

<%= form_for(@orderline, :remote => true) do |f| %>
<div class="field">
    <%= f.label :Order_ID %>
    <%= f.text_field :order_id %><br/>
    <%= f.label :SSCC %>
    <%= f.text_field :sscc %>
</div>
<div class="actions">
    <%= f.submit %>
</div>
<% end %>

_order_line.html.erb

<%= content_tag_for(:li, order_line) do %>

<%= order_line.id %> |
<%= order_line.order_id %> |
<%= order_line.sscc %>
(<%= link_to 'Delete', order_line, :confirm => 'Are you sure?',
:method => :delete, :remote => true %>)

<% end %>

create.js.erb

$('#orderlines').prepend('<%= escape_javascript(render(@orderline))%>');
$('#orderlines > li:first ').effect('highlight', {}, 3000);
$('#orderline_form > form')[0].reset();

destroy.js.erb

$('#<%= dom_id(@orderline) %>').css('background', 'red');
$('#<%= dom_id(@orderline) %>').hide("fade", {}, 1500);

4 个答案:

答案 0 :(得分:15)

我发现“application.js”存储了两次(... / public / assets / application.js和... / app / assets / javascripts / application.js)。 Rails 3.2.1 Asset管道编译它并创建另一个。检查并删除不需要的内容。

请记住,您可能已经有其他重复的资产,您刚刚开始注意到这一点,因为jQuery使其显而易见。

此链接帮助了我:

http://www.ruby.code-experiments.com/blog/2011/10/another-gotcha-with-the-rails-31-asset-pipeline-or-why-are-my-jquery-ujs-ajax-requests-triggered-twi.html

答案 1 :(得分:0)

确保在点击后禁用了提交按钮。它有助于本地化问题。

  $("form").submit(function(){
    $('input[type=submit]').attr('disabled', 'disabled');
  });

答案 2 :(得分:0)

我在Rails 4上遇到了同样的问题。我在development.rb中有这些设置:

config.assets.digest = true
config.assets.enabled = true

我删除了这些并运行rake assets:clean

现在它应该提交它。

答案 3 :(得分:0)

在Rails 5上,rails-ujs替换了jquery_ujs。如果两者都需要,事件将触发两次

```

// app / assets / javascripts / application.js

// =需要jquery_ujs <-删除此

// =需要rails-ujs

```