删除按钮在Rails 5.1中执行show动作而不是删除操作

时间:2017-11-30 15:02:27

标签: javascript ruby-on-rails ruby

我已尝试过一些解决方法,但我无法使其正常工作。 我正在关注Rails上的Jordan Hudgens教程。 我通过scafold生成了“博客”结构,最初一切都运行正常。现在我无法知道发生了什么。 我正在使用Rails 5.1。

每次点击“删除博客”按钮,它都会使用GET操作,而不是删除操作。

在查看服务器控制台时,我发现它正在执行show动作,而不是删除动作。

Server console log

另外,我查看了我的代码,但找不到任何错误。实际上,我不知道在哪里可以调试工具来找出问题。

_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

另外,我认为路线配置正确。

Blog routes

我的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

我完全迷失在这里。我不知道我还能做些什么才能找到错误。你能帮我吗?

谢谢,

布鲁诺

5 个答案:

答案 0 :(得分:0)

我相信您的链接上的路径参数出现错误:

<%= link_to 'Deletar Post', blog, method: :delete, data: { confirm: 'Deseja confirmar a exclusão do post?' } %>

第二个参数&#34;博客&#34;对我来说似乎很奇怪。猜猜它会是blog_pathblog_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?' } %>