无法使用 Ruby on rails 删除表中的项目
Posted
技术标签:
【中文标题】无法使用 Ruby on rails 删除表中的项目【英文标题】:Cant delete item in table With Ruby on rails 【发布时间】:2021-07-18 12:14:20 【问题描述】:我试图从我使用脚手架生成的表中删除一个项目。我做了一些研究,发现这是 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 //= 需要 rails-ujs 到 application.js 文件。最后,我在测量文件夹中创建了一个名为 destroy.js.erb 的文件。这包含:
$('.delete').bind('ajax:success', function()
$(this).closest('tr').fadeOut();
);
毕竟我仍然无法从表中删除项目。任何帮助将不胜感激
【问题讨论】:
你的意思是measurement? ;) 哎呀..是的,我愿意 【参考方案1】:使用 Button_to 代替 link_to 有效
【讨论】:
【参考方案2】:如果您使用服务器生成的 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();
);
【讨论】:
以上是关于无法使用 Ruby on rails 删除表中的项目的主要内容,如果未能解决你的问题,请参考以下文章
如何正确销毁 ruby on rails 中的关联记录?
无法从 Rails 4 和 PSQL 9.3 中的表中删除索引