jquery - ReferenceError:找不到变量:Rails
问题描述
我是一名尝试 Ruby on Rails 的初学者程序员。
我已将可排序的 UI 添加到我的待办事项列表应用程序中。我能够拖放列表项,但没有设法让新职位保留在数据库中。
当我拖放列表项时,我的 Safari 浏览器上的调试器显示错误:
ReferenceError:找不到变量:Rails
我正在关注本教程: https ://www.youtube.com/watch?v=Aru-XvzzGjU
我的猜测是task.js文件,其中没有找到变量 Ruby on Rails。当我将 jQuery 脚本移动到 jQuery UI 脚本下方时,错误消失,但提示另一个错误
未捕获的类型错误:$(...).sortable 不是函数
任务.js:
document.addEventListener("turbolinks:load", function () {
$("#tasks").sortable(
{
update: function(e, ui) {
//console.log($(this).sortable('serialize'));
Rails.ajax({
url: $(this).data("url"),
type: "PATCH",
data: $(this).sortable('serialize'),
});
}
}
);
});
应用程序.css:
//= require activestorage
//= require turbolinks
//= require_tree .
//= require jquery
//= require jquery_ujs
//= require jquery-ui/widget
//= require jquery-ui/widgets/sortable
//= require rails_sortable
索引.html:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min.js"></script>
<%= stylesheet_link_tag "application" %>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"
integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO"
crossorigin="anonymous">
任务.rb:
class Task < ApplicationRecord
validates :title, :description, presence:true
acts_as_list scope: [:title, :description]
end
任务控制器:
class TasksController < ApplicationController
# create new instance of the task
def index
@task = Task.order(:position)
end
def new
@task = Task.new
end
def create
#create a new instance
@task = Task.new(task_params)
@task.save
#redirect to url
redirect_to @task
end
def show
find_task
end
def edit
find_task
end
def update
find_task
@task.update(task_params)
redirect_to @task
end
def destroy
find_task.destroy
redirect_to tasks_path
end
def sort
params[:task].each_with_index do |id, index|
Task.where(id: id).update_all({position:index + 1})
end
head :ok
end
end
private
def task_params
params.require(:task).permit(:title, :description)
end
def find_task
@task = Task.find(params[:id])
return @task
end
解决方案
我意识到我只需要在application.js文件中添加它:
//= 需要 rails-ujs
推荐阅读
- javascript - 未定义变量-backbone.js
- python - 如何用有序 int 替换 NumPy 数组?
- mongodb - 如何使用 MongoDB Atlas 连接 MongoDB
- typescript - Typescript 3.5.3 为什么对象类型`{ sub: 123 }` 推断为字符串?
- asp.net-core - 发布配置(非调试)上的 Cloud Foundry .Net Core(基于源的、非发布的部署)
- python - 如果两个 for 循环之间的条件作为列表理解
- python - 我可以在 SQLAlchemy ORM 上使用 stream_results 吗?
- javascript - Vuetify 断点 vs CSS Helper 类
- c++ - 我可以创建一个对象方法,如果单独调用它会修改自身,但如果在复制初始化期间调用它会返回一个新对象?
- ethereum - Pantheon 链上许可白名单节点不会同步