Rails不能与turbolinks一起使用

时间:2017-05-10 08:24:01

标签: ruby-on-rails ruby ajax turbolinks

此问题似乎与我的相同:Rails turbolinks break submit remote form This question is also similarAs is this github issue

然而,那里发布的答案并没有解决我的问题......

我遇到的问题:

在用户显示页面上有一个简单的表单来提交新的待办事项。表单设置为使用AJAX。表单提交在初始页面加载或页面刷新时正常工作。 然而,它根本不起作用(单击“提交”按钮不会执行任何操作,不会在rails中或使用AJAX)在应用程序中的任何位置导航后。含义,一旦有了导航退出节目视图并返回而不刷新页面,单击表单上的提交按钮不会执行任何操作。

以上所引述的问题似乎都表明这是一个涉及turbolinks的问题,但是那里发布的答案要么不起作用,要么我无法理解它们以解决我的问题......

任何帮助都会太棒了!!!

以下是可能有用的代码:

_form.html.erb (rendered in the show view)

<%= form_for [task], remote: true do |f| %>
    <tr class="new-task">
        <td class="form-group">
            <%= f.text_field :name, class: 'form-control', placeholder: "Add new task..." %>
        </td>
        <td class="form-group">
            <%= f.date_field :expires_at, max: Time.now + 7.days, min: Time.now + 1.day %>
        </td>
        <td class="form-group">
            <%= f.submit "Save", class: 'btn btn-success' %>
        </td>
    </tr>
<% end %>

create method in TasksController

def create
    expires_at_format unless params[:task][:expires_at].blank? # adds the current time to a user created date

    @task = current_user.tasks.new(task_params)

    if @task.save
        flash.now[:notice] = "\"#{@task.name}\" added to To-Do list!"
    else
        if @task.errors.any?
            flash.now[:alert] = "Task not saved. #{@task.errors.full_messages.join '. ' }."  
        else
            flash.now[:alert] = "Something went wrong! Your task was not saved... "
        end
    end

    respond_to do |format|
        format.html { redirect_to root_path }
        format.js
    end
end

create.js.erb (AJAX to handle displaying new tasks)

<% if @task.valid? %>
    $('.task').children('.expires_at').each(function(){ 
        if ($(this).text() <= "<%= @task.expires_at.to_s %>") {
            $(this).parent().before("<%= escape_javascript(render(@task)) %>");
            return false;
        } 
    }); 
    $('#task_name').val("");
    $('th#task-count').html("You have <%= pluralize(current_user.tasks.unexpired.count, "Task").split.insert(1, "active").join ' ' %>");
    $(".flash").html("<div class='alert alert-success'><button type='button' class='close' data-dismiss='alert'>&times;</button><%= flash.now[:notice] %></div>");
<% else %>
    $('#task_name').val("");
    $('.flash').html("<div class='alert alert-warning'><button type='button' class='close' data-dismiss='alert'>&times;</button><%= flash.now[:alert] %></div>");
<% end %>

from application.js

//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require bootstrap
//= require toggleExpired
//= require_tree .

'来自gemfile`

gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'jquery-rails'
gem 'turbolinks'

1 个答案:

答案 0 :(得分:0)

您是否已启用JS调试器/控制台中的持久性登录(因此您可以跨页面加载查看控制台)?在我看来,你有一些破坏执行堆栈的JS错误。具体来说,我会调查jquery.turbolinks(看起来你没有安装它)。

另外,您是否100%自信Turbolinks造成了这个问题?禁用此特定gem可以相当容易地进一步隔离问题。