:确认导轨不工作



我刚刚开始用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-methoddata-turbo-confirm属性的简单a标记。点击该链接将触发一个确认框;OK";则将发送真实的DELETE请求。

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

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

相关内容

  • 没有找到相关文章

最新更新