jquery - 无法使用 Ruby on rails 删除表中的项目
问题描述
我试图从我使用脚手架生成的表中删除一个项目。我做了一些研究,发现这是 Windows 机器的一个常见问题,它不会删除它只是获取它的项目。这是我在控制器中的销毁方法
def destroy
@measurment.destroy
respond_to do |format|
format.js
format.html { redirect_to measurments_url, notice: "Measurment was successfully destroyed." }
format.json { head :no_content }
end
end
这是我在下面尝试的修复。我在索引页面的销毁链接中添加了 remote: true 和 class: "delete"
<td><%= link_to 'Destroy', measurment, method: :delete, data: { confirm: 'Are you sure?', remote: true }, class: "delete" %></td>
</tr>
然后我使用 yarn add jquery 添加 jquery 并添加 //= require jquery //= require rails-ujs 到 application.js 文件。最后,我在测量文件夹中创建了一个名为 destroy.js.erb 的文件。这包含:
$('.delete').bind('ajax:success', function(){
$(this).closest('tr').fadeOut();
});
毕竟我仍然不能从表中删除项目。任何帮助将不胜感激
解决方案
如果您使用服务器生成的 JavaScript 响应 (SJR),您希望直接执行操作而不是添加事件处理程序:
<%= link_to 'Destroy', measurment, method: :delete, data: { confirm: 'Are you sure?', remote: true }, class: "delete", id: "measurment-#{measurment.id}" %>
$("#measurment-<%= @meaurement.id %>").closest('tr')
.fadeOut();
SJR 的工作方式是将返回的 javascript 弹出到脚本标记中,并在请求完成后立即执行。然而,这段代码完全不知道是哪个元素触发了原始事件,所以你必须得到 hacky 和唯一的 id。
如果您改为发送 JSON 请求,您可以编写更好的 javascript,而不是让您的服务器负责更改页面。
<%= link_to 'Destroy', measurment, method: :delete,
data: {
confirm: 'Are you sure?',
remote: true,
type: 'json'
}, class: "delete" %>
// place this code in your packs or the assets pipeline
$(document).on('ajax:success', '.delete', function(){
$(this).closest('tr').fadeOut();
});
推荐阅读
- gremlin - 为什么 Gremlin 函数 fold() 会影响 JSON 响应中的结果?
- javascript - 关于数组和按键功能的误解和问题
- c# - 使用 C# 的 openCV 进行人脸识别精度
- ffmpeg - 使用 ffmpeg 从 5.1 环绕 AAC 导出 6 个 WAV 文件
- python - 如何重新索引“多分组”数据框?
- html - 在元素上设置滚动条以避免全局滚动条
- excel - 根据excel中的类别将一列拆分为多个
- javascript - 反应同时处理点击和模糊事件
- laravel-5 - 在 PhpStorm 中使用 Laravel 插件的 *blade.php 文件中的自动完成和语法问题
- python - 接受 1 个位置参数,但给出了 2 个(对于 python 包:transitions)