2017-04-12 119 views
2

我被困在论坛(包含的Stackoverflow)中似乎很好记录的问题中,但没有任何主题可以帮助我解决问题。 简而言之,我的远程调用控制器的所有应用程序都被触发两次。我在某处读到它可能是一个jQuery重复问题,但正如你在application.html.erb中看到的那样,application.js可能不是,因为jQuery只出现一次。在其他问题中出现的另一个解决方案是删除turbolink,但这并未解决我的问题。Rails 4.2.7提交远程表单的事件触发两次

我正面临的错误示例: 我有一个使用simple_form呈现的表单,它向操作提交GET请求。

  <%= simple_form_for :create_answer, url: create_answer_path, remote: true do |f| %> 
        <b>Intenção</b> 
        <%= f.input :intents, :class=> "form-control", label: false%> 

       <b>Entidades</b> 
       <%= f.input :entities, :class=> "form-control", label: false%> 

        <b>Valores</b> 
        <%= f.input :values, :class=> "form-control", label: false%> 

       <b>Text</b> 
        <%= f.text_area :text, :class=> "form-control", label: false%> 

        <p class="text-center" style="margin-top:5px;"> 
        <%= f.submit "Criar", :class => "btn btn-primary" %> 
        </p> 
       <% end %> 

当提交操作的用户点击被触发两次,因为你可以在控制台日志中看到: enter image description here 因为我处理这个动作付费远程API,调用它两次是不可接受的。

这里是我的applicatipon.html.erb文件:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <META HTTP-EQUIV="refresh" CONTENT="<%[email protected]_left%>"> 
    <title>S2Chat</title> 
    <%= csrf_meta_tags %> 


<script src="https://js.pusher.com/4.0/pusher.min.js"></script> 


<script type="text/javascript"> 
    $(function(){ 
    $("#dropDown").dropdown(); 
    }); 
</script> 

<%= stylesheet_link_tag "application", :media => "all" %> 
<%= yield(:page_stylesheet) if content_for?(:page_stylesheet) %> 


<style type="text/css"> 
    body{ 
    overflow-x: hidden; 
    } 

    .verticalCenter { 
    min-height: 100%; /* Fallback for browsers do NOT support vh unit */ 
    min-height: 100vh; /* These two lines are counted as one :-)  */ 

    display: flex; 
    align-items: center; 
    } 

    .audios{ 
    display: none; 
    } 
</style> 

<audio class="audios" id="new_attendance_audio" controls preload="none"> 
    <source src="/assets/door_bell.mp3" type="audio/mpeg"> 
</audio> 

<audio class="audios" id="new_message_audio" controls preload="none"> 
    <source src="/assets/message_alert.mp3" type="audio/mpeg"> 
</audio> 

<audio class="audios" id="attendance_finished_audio" controls preload="none"> 
    <source src="/assets/error1.mp3" type="audio/mpeg"> 
</audio>  


<!-- Fixed navbar --> 
<div class="navbar navbar-inverse navbar-fixed-top"> 
    <div class="container"> 
    <div class="navbar-header"> 
     <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> 
     <span class="icon-bar"></span> 
     <span class="icon-bar"></span> 
     <span class="icon-bar"></span> 
     </button> 
     <a class="navbar-brand" href="/home/index" style="color:white;">S2Chat</a> 
    </div> 
    <% if user_signed_in == true%> 
     <div class="navbar-collapse collapse"> 
     <ul class="nav navbar-nav navbar-right"> 
      <li id="dropDown" class="dropdown"> 
      <a href="#" class="dropdown-toggle" data-toggle="dropdown" style="color:white;"> 
       <%=cookies.encrypted[:user_fullname]%><b class="caret"></b> 
      </a> 
      <ul class="dropdown-menu"> 
       <li class="dropdown-header">Conta</li> 
       <li> 
       <% if cookies.encrypted[:user_type] == "attendant"%> 
        <%= link_to "Sair", delete_session_path, method: :delete, :data => {:confirm => 'Ao deslogar-se, todos os atendimentos que você está envolvido serão automaticamente finalizados. Você tem certeza que deseja sair?'}%> 
       <%else%> 
        <%= link_to "Sair", delete_session_path, method: :delete%> 
       <%end%> 
       </li> 
      </ul> 
      </li> 
     </ul> 
     </div> 
    <% end%> 
    </div> 
</div> 


<div> 
    <%= yield %> 
</div> 

<!-- Javascripts 
================================================== --> 
<!-- Placed at the end of the document so the pages load faster --> 
<%= javascript_include_tag "application" %> 

这里是我的application.js:

//= require jquery 
    //= require jquery_ujs 
    //= require twitter/bootstrap 
    //= require_tree . 

这里是我的Gemfile:

source 'https://rubygems.org' 

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' 
gem 'rails', '4.2.7.1' 
# Use SCSS for stylesheets 
gem 'sass-rails', '~> 5.0' 
# Use Uglifier as compressor for JavaScript assets 
gem 'uglifier', '>= 1.3.0' 
# Use CoffeeScript for .coffee assets and views 
gem 'coffee-rails', '~> 4.1.0' 
# See https://github.com/rails/execjs#readme for more supported runtimes 
gem 'therubyracer', platforms: :ruby 

# Use jquery as the JavaScript library 
gem 'jquery-rails' 

    # Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks 

    # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder 
    gem 'jbuilder', '~> 2.0' 
    # bundle exec rake doc:rails generates the API under doc/api. 
    gem 'sdoc', '~> 0.4.0', group: :doc 
    gem "excon" 
    gem "rails_12factor" 
    gem 'rails_12factor', group: :production 
    gem 'simple_form' 
    gem "less-rails" #Sprockets (what Rails 3.1 uses for its asset pipeline) supports LESS 
    gem 'twitter-bootstrap-rails' 
    # twitter bootstrap css & javascript toolkit 
    #gem 'twitter-bootswatch-rails', '~> 3.3.4' 
    # twitter bootstrap helpers gem, e.g., alerts etc... 
    #gem 'twitter-bootswatch-rails-helpers' 
    # Use ActiveModel has_secure_password 
    # gem 'bcrypt', '~> 3.1.7' 
    # Use Unicorn as the app server 
    # gem 'unicorn' 
    # Use Capistrano for deployment 
    # gem 'capistrano-rails', group: :development 
    source 'https://rails-assets.org' do 
    gem 'rails-assets-tether', '>= 1.3.3' 
    end 
     group :development, :test do 
     # Call 'byebug' anywhere in the code to stop execution and get a  debugger console 
    gem 'byebug' 
    end 

    group :development do 
     # Access an IRB console on exception pages or by using <%= console %> in views 
    gem 'web-console', '~> 2.0' 

# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring 
gem 'spring' 
    end 

任何人都可以帮我吗?谢谢

回答

2

从你提供的代码片段看来,它看起来并不像你的动作触发两次,而是你的日志条目被重复。

rails_12factor是可能的罪魁祸首在这里,它看起来像你有它在你的Gemfile列出两次。这会将你的日志输出到标准输出和Rails记录器,这样他们将会出现在你的终端两次。

删除gem "rails_12factor"并保留gem 'rails_12factor', group: :production。然后bundle并重新启动Rails服务器,问题应该消失。

+0

您是对的,谢谢! –

0

disable_with属性不帮?

+0

你可以给我一个例子,我可以把它放在我的代码中吗?谢谢! –

+0

<%= f.submit“Criar”,:class =>“btn btn-primary”,:data => {:disable_with =>“Please wait ...”}%> – Hristo

+0

它没有解决我的问题: ( –