我刚刚开始用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 uj也被加载到中,所以我不确定该从哪里开始。
<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=">
谢谢!
我必须在数据属性中添加我的confirm属性才能使其工作。我正在使用带引导程序的rails 4。我希望这能帮助其他有这个问题的人。
link_to 'Delete', @rule, method: :delete, data: { confirm: 'Are you sure you want to delete this alert?' }
这依赖于jQuery,确保您拥有以下内容:
在您的Gemfile 中
group :assets do
gem 'jquery-rails'
end
在assets/javascripts/application.js文件中,在//= require_tree .
行之前
//= require jquery
//= require jquery_ujs
link_to和button_to之间的区别在于HTTP谓词。link_to发出GET请求,button_发出POST请求。对于RESTful路由,delete
操作是对控制器/id的POST请求。如果向控制器/id发出GET,则会将其分派给show
操作。
AIUI,link_to与GET动词以外的任何东西都是一个坏主意。第一,右键单击不会保留动词。第二,即使您可能需要登录才能真正修改数据库,您也不希望机器人在页面上抓取链接,从而触发delete
操作。
感觉很笨,但是adblock阻塞了消息框。很抱歉。现在一切都很好,我刚刚禁用了广告块。
在Rails 7.0.4.3中,它被更改了,现在可以使用turbo-method
使用链接
<%= link_to 'Delete', article_path(article), data: { "turbo-method": :delete, 'turbo-confirm': "Are you sure" } %></td>
如果您想删除rails 7中带有确认框的内容,您可以尝试以下操作:
使用button_to
(更倾向于IMHO(:
<%= button_to 'Destroy', product, method: :delete,
form: {data: {turbo_confirm: 'Are you sure?'}} %>
这将呈现一个HTML表单标记,该标记在提交(确认后(时发送POST
请求,但具有一个隐藏的_method
属性(值为"delete"(。这样rails将把这个请求当作有一个DELETE
方法来处理。
它将被路由到products#destroy
(或您的路由所说的任何内容(。
带link_to
:
<%= link_to 'Destroy', product,
data: {turbo_method: :delete, turbo_confirm: 'Sure?'} %>
这将呈现具有data-turbo-method
和data-turbo-confirm
属性的简单a
标记。点击该链接将触发一个确认框;OK";则将发送真实的DELETE
请求。
如果您想用redirect_to
结束控制器中的destroy
操作,某些浏览器会使用DELETE
方法重定向到新位置(导致错误(,因此请确保添加status: :see_other
参数,如指南所示。
我在Chrome中运行了一个弹出窗口阻止程序。我刚刚将http://localhost:3000
列入白名单,它对我很有效。