Rails 4 Turbolinks使表单多次提交

我使用一些代码在Rails 3上工作得很好但在Rails 4上工作不好,我猜它是由Turbolinks引起的,但我不太了解它,不能深入挖掘解决我的问题,这里是代码:

视图:

a/v/m/_new_comment.slim .new-comment - if current_user = render "editor_toolbar" = form_for(Comment.new, :remote => true, :url => mission_comments_path(@mission)) do |f| = f.text_area :content, :class => "span10", :rows => "4", :tabindex => "1" #preview.hidden = "Loading..." = f.submit t("missions.submit_comment"), "data-disable-with" => t("missions.submitting"), :class => "btn btn-primary", :tabindex => "2" - else = render "need_login_to_comment" 

控制器:

 def create @mission = Mission.find(params[:mission_id]) @comment = @mission.comments.build(comment_params) @comment.user = current_user if @comment.save @mission.events.create(user: current_user, action: "comment") render layout: false end 

和js:

  $(".new-comment textarea").focus();  $(".comments").append(" @mission.comments.count-1) %>"); $(".new-comment #preview").addClass("hidden").html(''); $(".new-comment textarea").css("display", "block").val(''); $(".editor-toolbar .preview").removeClass("active"); $(".editor-toolbar .edit").addClass("active");  

我有两个关于这个代码的问题,第一个:这样的控制器代码不起作用,js代码转移到客户端但没有运行,我必须添加render layout: false在该操作的底部,不需要在Rails 3上

第二个问题:当我第一次访问此页面时,重新加载页面,评论function有效,但如果我点击其他页面的链接跳转到此页面,我提交此表单将导致多次ajax请求调用,将创建多个注释

谢谢你们

通过move = javascript_include_tag "application", "data-turbolinks-track" => true从头到头解决这个问题,感谢所有的帮助

您可以将其保留在正文中,只需添加到脚本标记:

 "data-turbolinks-eval" => false 

一般来说,使用turbolinks,最好确保你的代码是“幂等的”,所以如果它运行不止一次,绑定将不会多次设置。

执行此操作的最佳方法是使用$(’blah’)。bind(),首先调用unbind:

  $('blah').unbind('click').bind('click', function() { 

您可能遇到问题的一个可能原因是,如果您在每个页面上都包含js。 我的理解是它会将js附加到头部,如果你将它包含在多个页面上,你会发现自己多次绑定ajax。 话虽如此,你所看到的如何包括js并不明显。 你可以通过在application.js中包含js文件来解决这个问题