使用 Rails.ajax 和 jquery 可排序插件时的 ActionView::MissingTemplate

Posted

技术标签:

【中文标题】使用 Rails.ajax 和 jquery 可排序插件时的 ActionView::MissingTemplate【英文标题】:ActionView::MissingTemplate when using Rails.ajax and jquery sortable plugin 【发布时间】:2018-07-06 15:43:49 【问题描述】:

我在 Go Rails 上关注 this episode 将 jquery ui 可排序插件添加到我的应用程序(主要是添加拖放功能)。

在 ajax 请求之前一切正常。即便如此,它也会启动patch 请求,但甚至从未到达控制器操作(不会对数据库进行任何更改,并且我放在操作顶部的binding.pry 不会被触发)。

这是我得到的错误:

Started PATCH "/contents/sort" for 127.0.0.1 at 2018-01-27 17:03:43 +0530
Processing by ContentsController#sort as */*
  Parameters: "content"=>["13", "4"]
Completed 500 Internal Server Error in 29ms (ActiveRecord: 0.0ms)


ActionView::MissingTemplate (Missing template contents/sort, 
application/sort with :locale=>[:en], :formats=>[:js, :html], 
:variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, 
:coffee, :jbuilder]. Searched in:
  * "/mnt/c/Users/mumar/Documents/Code/Frontier/newsletter-app/app/views"
  * "/home/Umar/.rvm/gems/ruby-2.4.0/gems/devise-4.3.0/app/views"
):

这是我的 CoffeeScript 文件的摘录:

document.addEventListener 'turbolinks:load', ->
  $('.sortable').sortable 
    handle: '.handle'
    update: (e, ui) ->
      Rails.ajax
        url: $(this).data("url")
        type: "PATCH"
        data: $(this).sortable 'serialize'
      return
  return

这是控制器操作

def sort
  binding.pry
  params[:content].each_with_index do |id, index|
    Content.where(id: id).update_all(position: index + 1)
  end

  head :ok
end

视图分布在不同的部分,我只是在这里包含了相关的部分:

.sortablediv:

<div class="sortable list-group" data-url="<%= sort_contents_path %>">
  <% section.contents.each do |content| %>
    <% if (content.edition == @edition) && (content.top_story == false) %>
      <%= render partial: 'shared/content', locals: content: content %>
    <% end %>
  <% end %>
</div>

来自上述sn-p的shared/content部分:

<div class="card-content list-group-item" id="<%= dom_id(content) %>">
  <h5 class="card-subtitle mb-2 text-muted">
    <%= content.heading %> 

    <%= link_to fa_icon('star', 'aria-hidden': 'true', 
      style:top_story_status_color(content)), toggle_top_content_path(content), 
      set_tooltip('Top Story') %>

    <span class="handle" data-toggle="tooltip" data-placement="bottom" title="Move Article">
      <%= fa_icon('arrows', 'aria-hidden': 'true', style: 'color: #a1a1a3;') %>      
    </span>
    </h5>
  <p class="card-text"><%= content.body %></p>
  <span>
    Read More: <%= link_to content.link, content.link, class: "content-link" %>  
  </span>
</div>

需要明确的是,我可以拖放内容,只是不能让新职位在数据库中持久存在。每当我拖动任何东西时都会出现上述错误(尽管我的应用程序一直在工作 - 错误仅在控制台上,而不是在浏览器上)。

【问题讨论】:

【参考方案1】:

好的,不知道发生了什么,但它似乎已经修复了。

很奇怪,因为我在测试时重启了我的 Rails 服务器几次,甚至关闭了我的电脑并在第二天再次尝试,但没有成功。

它现在才有效,我很困惑。不管怎样,我想我可以结束这个问题。

【讨论】:

以上是关于使用 Rails.ajax 和 jquery 可排序插件时的 ActionView::MissingTemplate的主要内容,如果未能解决你的问题,请参考以下文章

Rails - Ajax 与不显眼的 javascript Jquery UI 进度条

Rails Ajax:.js.erb 呈现为文本,而不是 JS

Rails 3.1 ajax:成功处理

Rails ajax 响应和 DELETE 方法

Ruby on Rails AJAX文件上传

Rails 4,Ajax 导致 404 和 500 错误