17

我刚开始使用 ruby​​ on rails 进行编码,我一直在遵循一个指南,该指南使用的 rails 版本比我使用的更过时。我正在使用 3.2.12

这是我的代码:

<%= button_to 'Destroy', product, :method => "delete", :confirm => 'Are you sure?'  %>

据我了解,这些是传递给 rails 的符号,然后将其转换为 html 或 javascript 操作,然后弹出消息框并删除对象(如果适用)。上面的代码销毁了对象,但是并没有弹出确认框。为什么是这样?另外,我最初有以下内容:

<%= link_to 'Destroy', product, :method => "delete", :confirm => 'Are you sure?'  %>

在任何情况下都不会弹出确认框,使用 link_to 或 button_to。下面是使用 Chrome 的检查器检查时呈现的 html。jquery 和 jquery-ujs 也被加载到了,所以我不确定从这里去哪里。

<input name="_method" type="hidden" value="delete">
<input data-confirm="Are you sureeee?" type="submit" value="Destroy">
<input name="authenticity_token" type="hidden" value="Q2xicqELHYHtrwarbtPBe5PT2bZgWV5C+JdcReJI8ig=">

谢谢!

4

6 回答 6

62

我必须在 data 属性中添加我的确认属性才能使其工作。我正在使用带有引导程序的 Rails 4。我希望这可以帮助遇到这个问题的其他人。

link_to 'Delete', @rule, method: :delete, data: { confirm: 'Are you sure you want to delete this alert?' }
于 2014-12-10T17:24:33.313 回答
11

这依赖于 jQuery,请确保您具有以下内容:

在你的 Gemfile

group :assets do
  gem 'jquery-rails'
end

在您的 assets/javascripts/application.js 文件中,在该行之前//= require_tree .

//= require jquery
//= require jquery_ujs
于 2013-04-04T00:17:22.427 回答
5

link_to 和 button_to 的区别在于 HTTP 动词。link_to 发出 GET 请求,而 button_to 发出 POST 请求。使用 RESTful 路由,操作是对controller/iddelete的 POST 请求。如果您向controller/id发出 GET ,它将被分派给操作。show

AIUI,link_to 与 GET 动词以外的任何内容都是一个坏主意。一,右键单击不保留动词。delete第二,即使您可能需要登录才能实际修改数据库,您也不希望爬取页面的机器人跟随链接从而触发操作。

于 2013-04-04T01:10:52.273 回答
4

感觉很笨,但 adblock 阻止了消息框。对于那个很抱歉。现在一切都很好,我只是禁用了adblock。

于 2013-04-05T02:53:48.417 回答
0

我有一个在 Chrome 中运行的弹出窗口阻止程序。我刚刚列入白名单http://localhost:3000,它对我有用。

于 2015-10-27T22:35:28.043 回答
0

如果你想在 rails 7 中删除带有确认框的东西,你可以试试这个:

button_to(更喜欢恕我直言):

<%= button_to 'Destroy', product, method: :delete,
  form: {data: {turbo_confirm: 'Are you sure?'}} %>

POST这将呈现一个 HTML 表单标签,该标签在提交时(确认后)发送请求,但具有_method带有“删除”值的隐藏属性。因此,rails 会将此请求视为具有DELETE方法。

它将被路由到products#destroy(或您的路由所说的任何内容)。

link_to

<%= link_to 'Destroy', product,
  data: {turbo_method: :delete, turbo_confirm: 'Sure?'} %>

这将呈现一个带有和属性的简单a标签。单击此链接将触发一个确认框,如果选择“确定”,将发送一个真实的请求。data-turbo-methoddata-turbo-confirmDELETE

如果您想destroy在控制器中使用 结束操作redirect_to,某些浏览器将使用方法重定向到新位置DELETE(导致错误),因此请确保添加status: :see_other参数,如指南建议的那样。

于 2022-02-09T11:18:14.990 回答