我已尝试过一些解决方法,但我无法使其正常工作。 我正在关注Rails上的Jordan Hudgens教程。 我通过scafold生成了“博客”结构,最初一切都运行正常。现在我无法知道发生了什么。 我正在使用Rails 5.1。
每次点击“删除博客”按钮,它都会使用GET操作,而不是删除操作。
在查看服务器控制台时,我发现它正在执行show动作,而不是删除动作。
另外,我查看了我的代码,但找不到任何错误。实际上,我不知道在哪里可以调试工具来找出问题。
_blog.html.erb
<%= link_to 'Deletar Post', blog, method: :delete, data: { confirm: 'Deseja confirmar a exclusão do post?' } %>
blogs_controller.rb
def destroy
@blog.destroy
respond_to do |format|
format.html { redirect_to blogs_url, notice: 'Seu post foi excluído com sucesso.' }
format.json { head :no_content }
end
end
另外,我认为路线配置正确。
我的application.js文件
//= require rails-ujs
//= require turbolinks
//= require_tree .
//= require jquery3
//= require popper
//= require bootstrap-sprockets
//= require jquery_ujs
另外,我有jquery-rails作为宝石
gem 'devise', '~> 4.3'
gem 'bootstrap', '~> 4.0.0.beta2.1'
gem 'jquery-rails'
gem 'brunocruz_view_tool', '~> 0.1.0'
gem 'petergate', '~> 1.8'
奇怪,因为“删除”按钮工作正常,所以我不久前就停止了测试。现在我找不到让它停下来的东西。
我也试过在控制台上运行destroy动作。它起作用了。
Destroy action using rails console
我运行JavaScript控制台寻找错误。但我找不到任何东西。 (我实际上是在寻找正确的地方吗?)
In this test, I tried to run 2x this: click on "delete" button and then come back to blog index
我完全迷失在这里。我不知道我还能做些什么才能找到错误。你能帮我吗?
谢谢,
布鲁诺
答案 0 :(得分:0)
我相信您的链接上的路径参数出现错误:
<%= link_to 'Deletar Post', blog, method: :delete, data: { confirm: 'Deseja confirmar a exclusão do post?' } %>
第二个参数&#34;博客&#34;对我来说似乎很奇怪。猜猜它会是blog_path
或blog_url
。你能试试吗?
答案 1 :(得分:0)
这是您的代码中的每一部分吗?通过博客删除你必须给他一个。 <%= link_to 'Deletar Post', blog, method: :delete, data: { confirm: 'Deseja confirmar a exclusão do post?' } %>
例如
<% @pops.each do |pop| %>
#fields of pop, in your case is blog
<%= link_to 'Destroy', pop, method: :delete, data: { confirm: 'Are you sure?' } %>
#in the scaffold, the fields are generated inside a table, but it is not
#the line that passes a blog information that you want to delete, is
#each. understood?
<% end %>
答案 2 :(得分:0)
我猜测你的代码是在一个.each循环中,这就是为什么&#39;博客&#39;使用,而在这里你想要删除操作的路径,并添加你想要销毁的项目的ID。只是在这里猜测,因为你没有提供太多的信息。
如果你的路线是这样的:
resources :blogs, only: [:destroy]
然后你的路径是概率,blog_path,如果你看看你的路线(我通常去localhost:3000 /路线,看看你可以找到你的路线及其需要的所有路线。)
所以我相信它应该是这样的:
<%= link_to 'Deletar Post', blog_path(blog), method: :delete, data: { confirm: 'Deseja confirmar a exclusão do post?' } %>
如果它应该删除博客,那么它也不是按钮上的错误名称吗? :d
答案 3 :(得分:0)
我整天都在解决类似问题,并且已经解决了。这个问题很陈旧,我想我会在这里记录这个问题的人,我想这个问题还会再出现。
(在我的情况下):delete方法被忽略的原因是未将UJS发送到浏览器。昨天在将两个应用程序(一个从4.2升级到一个5.1)升级到Rails 5.2的过程中,我最终失去了UJS。我承认我运行了许多捆绑升级和捆绑安装,并在一些我不希望使用的宝石上抖动。也许这给我带来了问题。
这只是在我的管理部分中发生的,我有针对JS和CSS的自定义清单(分别为admin.js和admin.css),这些清单在布局中正确引用,并且正确地称为precompiled as described in the official guide:>
在 app / views / layouts / admin.html.erb 中:
<%= javascript_include_tag 'admin', 'data-turbolinks-track': 'reload' %>
在 app / assets / javascripts / admin.js 中:
//= require jquery
//= require rails-ujs
//= require_tree .
神秘地,正确提供CSS清单没有问题。
另一方面,我的JS资产清单(规则5.1:https://guides.rubyonrails.org/asset_pipeline.html)的变化来自
//= require jquery_ujs
到
//= require rails-ujs
(请注意,下划线现在是一个连字符)可能有点像红色鲱鱼,因为我摆弄那些无济于事的引用。
问题最终是由与我的 admin.js 所在的文件夹中的 admin.coffee 空文件引起的。必须优先使用资产管道,而不要使用相同名称的.js文件。我不需要CoffeeScript。一旦发现并删除它,我就重新营业。
答案 4 :(得分:0)
尝试以下语法,希望对您有所帮助
<%= link_to 'Deletar Post', blog_path(blog), method: :delete, data: { confirm: 'Deseja confirmar a exclusão do post?' } %>