在Rails中使用link_to删除操作

8
在我的网格中,
link_to('Edit', edit_manage_user_path(user.id))

工作正常,但这个有点问题。

link_to('Delete', delete_manage_user_path(user.id))

当我的控制器中有一个删除操作时,会出现“undefined method `delete_manage_user_path' for #<#:0xc05439c>”错误。你有任何想法为什么会出现这个错误吗?


你可以在 link_to 中添加 method: :delete。除此之外,你还可以添加一个确认步骤,因为删除操作是不可逆的。所以代码看起来像这样:link_to '删除', manage_user_path(user), method: :delete, data: { confirm: "确定要删除吗?" } - duykhoa
6个回答

16

在 Rails 7 之前

<%= link_to 'Delete', manage_user_path(user),
  method: :delete, data: {confirm: "Are you sure?"} %>

Rails 7(内置Turbo)

<%= link_to 'Delete', manage_user_path(user),
  data: {turbo_method: :delete, turbo_confirm: 'Are you sure?'} %>

来源:https://guides.rubyonrails.org/getting_started.html#deleting-an-article - undefined

9
如果您使用resources路由,那么destroy操作的路径与show相同,但是您应该使用HTTP DELETE方法:
link_to 'Delete', [:manage, user], method: :delete

3
 link_to 'Delete', manage_user_path(user), method: :delete

这将调用您的删除操作。如果您正在使用RESTful路由,则没有delete_manage_user_path(user)此类路径。

这对我有用,但它在控制器中寻找一个destroy方法,将def delete更改为def destroy后,在Rails 5.2中完美运行。 - tomb

2

我总是更喜欢按钮的方式:

 = form_with url: destroy_user_session_path, method: :delete do |form|
   = form.submit "Sign out"

这个表单按钮的方式对我非常有效,而上面例子中使用 method: :delete 构建的链接从未触发 :destroy 动作。为什么会这样? - nimmolo
1
“Link”版本需要一些JS Rails库。许多人会移除它们,认为它们不是必需的。 - aarkerio
1
啊哈...谢谢,是的我找到了这些库。它需要jqueryjquery_ujs两个库才能使这些链接正常工作。 - nimmolo

1
知道了就是成功的一半。您需要找出正确的删除资源路径,可以通过运行以下命令来实现: bundle exec rake routes 这是我自己的Rails应用程序输出示例的屏幕截图: enter image description here 我添加了一个箭头以指出您应该寻找的内容。
一旦您有了路径,接下来就需要指定用户单击链接时要发送HTTP请求的方式。您可以通过为嵌套的自定义data属性提供method键来实现此操作。以下是一个示例:
<%= link_to "Delete", user_path(user), data: { method: :delete } %>

其他资源:


0

删除调用的格式为:

<%= link_to 'Delete', manage_user_path(user.id), :method => :delete %>

使用rake routes命令可以了解可用的路由,包括生成的路由助手以及处理请求的控制器/操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接