Rails 4 link_to销毁在入门教程中不起作用

我正在学习入门教程(创build博客),并且link_to Destroyfunction不正常。 在terminal中,它总是将其解释为#SHOW。

在阅读类似的问题时,我已经了解到,删除必须转换为POST,供浏览器解释。 这似乎并没有发生。

我在Lynda.com Rails课程中也遇到了使用Destroy的同样的问题,所以它让我相信这是在我的开发环境中。 我在MacBook Pro Lion上使用Rails 4,Ruby 2.00p274,MySQL,WEBrick作为HTTP服务器。

在terminal会话中selectDestroy时:

Started GET "/posts/4" for 127.0.0.1 at 2013-08-09 13:45:20 -0600 Processing by PostsController#show as HTML Parameters: {"id"=>"4"} Post Load (0.6ms) SELECT "posts".* FROM "posts" WHERE "posts"."id" = ? LIMIT 1 [["id", "4"]] Rendered posts/show.html.erb within layouts/application (0.4ms) Completed 200 OK in 13ms (Views: 8.6ms | ActiveRecord: 0.6ms) 

在ports-controller.rb中:

 def destroy @post = Post.find(params[:id]) @post.destroy redirect_to action: :index end 

在index.html.erb中:

 <% @posts.each do |post| %> <tr> <td><%= post.title %></td> <td><%= post.text %></td> <td><%= link_to 'Show', post %></td> <td><%= link_to 'Edit', edit_post_path(post) %></td>    <td><%= link_to 'Destroy', { action: :destroy, id: post.id }, method: :delete, data: { confirm: 'Are you sure?' } %></td> </tr> <% end %> 

在routes.rb中

 Blog::Application.routes.draw do resources :posts do resources :comments end root to: 'welcome#index' end 

尝试这个

 <%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %> 

确保gem'jquery-rails'在gemfile中,jquery_ujs包含在app / assets / javascripts / application.js文件中

 //= require jquery //= require jquery_ujs 

来源: https : //github.com/rails/jquery-ujs

对于rails 4.2.X,我有同样的问题。 检查了所有的JavaScript文件,但无法使其工作。 如果仔细查看服务器请求,你会在参数中丢失“authenticity_token”,所以用户会被注销。 在轨道4.1和以上你必须使用button_to而不是link_to

我解决了这个问题,只需要在assets / javascripts / application.js中添加即可

 //= require jquery_ujs 

Started GET "/posts/4" for 127.0.0.1 at 2013-08-09 13:45:20 -0600

这就是问题。 删除链接正在使用GET http动词,即使您在链接中使用了method: delete

看看下面的SO线程

确保你有一个通过rake路由的删除REST方法。

 DELETE /articles/:id(.:format) articles#destroy 

我只有这个博客版本有同样的问题,因为我在做这两个。 http://blog.8thcolor.com/en/2011/08/nested-resources-with-independent-views-in-ruby-on-rails/

我也试图学习如何使用Web控制台并在其中撬动。 我的问题是,binding.pry不会出现在销毁方法,但将在显示。 这告诉我,它必须是一个不好的环节吗? 甚至没有达到销毁的方法。 谢谢大家的答案。 我们不得不尝试一下不是吗? 试

 <td><%= link_to 'Destroy', { action: :destroy, id: post.id }, method: :delete, data: { confirm: 'Are you sure?' } %></td> 

是不会为那个工作的。

这是他的

 <td><%= link_to 'Destroy', [comment.post, comment], :confirm => 'Are you sure?', :method => :delete %></td> 

因为你只想在这里删除评论。

但是,像以下这样结合的东西没有任何错误,但我仍然没有从控制器中的销毁方法binding.pry。

 <td><%= link_to 'Destroy', [comment.post, comment], method: :delete, data: { confirm: 'Are you sure?' } %></td> 

我从来没有得到像你所期望的那样的确认。

所以,试图弄清楚jquery是怎么回事。 我可以证实,这是我的情况,但其余的我将离开nubes,因为这将显示在谷歌search。

我有同样的问题,并意识到,我已经创build了我的轨应用程序与-J ,这是一样的 – --skip-javascript 。 您需要启用JavaScript才能正常工作; 缺lesspopup确认删除是一个死的赠品。

我遇到了这个问题,这是由于三次点击指导的代码块,并直接将代码复制/粘贴到我的编辑器(OSX上的ST2)。

您应该检查为链接生成的HTML如下所示:

 <a data-confirm="Are you sure?" data-method="delete" href="/posts/3/comments/3" rel="nofollow">Destroy Comment</a> 

如果不是,但是看起来像下面那样,那么Javascript将不会被应用:

 <a href="/posts/3/comments/3"                data="{:confirm=&gt;&quot;Are you sure?&quot;}"                method="delete">Destroy Comment</a> 

href和未parsing的Ruby之间的巨大差距是由指南中使用的非中断空格(unicode字符\u00a0 )复制到脚本中引起的。

我不知道为什么这不会导致脚本parsing错误。

我和巴里有同样的问题。 确保在/app/views/index.html.erb文件中正确地复制/粘贴,并检查呈现的html。

我有同样的问题。 在我的情况下,AI已经改变了\ app \ views \ layouts \ application.html.erb文件

 <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> 

 <%= stylesheet_link_tag 'default', media: 'all', 'data-turbolinks-track' => true %> <%= javascript_include_tag 'default', 'data-turbolinks-track' => true %> 

避免我的第一个Rails问题。 但是,它显然改变了JavaScript的执行并导致了Destroy问题。 因此,将您的\ app \ views \ layouts \ application.html.erb文件回滚到其原始状态,并在此处理此问题

Rails ExecJS :: ProgramError在Pages#home?

在evedovelli答案(关于Windows中的coffeescriptgem)。

在js中包含下面的行

 //= require jquery_ujs 

包括gem:

 gem 'jquery-rails' 

销毁链接:

 <%= link_to "Logout", destroy_user_session_path %> 

我遇到了同样的问题。 我这样工作:

我的环境 是:A. ruby​​ 2.2.4p230(2015-12-16修订版53155)[x64-mingw32] B. Rails 4.2.5 C.浏览器:Firfox 44.02

  1. 在html页面添加包含js,因为删除function将使用js来处理。 <%= javascript_include_tag "application" %>

  2. skip_before_action :verify_authenticity_token添加到控制器,以防AdsController中的InvalidAuthenticityToken#destroy

  3. 添加link_to到您的网页<%= link_to 'Delete', post, method: :delete, data: {confirm: "Are you sure?"}%>

    现在,我可以使用link_to从我的页面删除logging。

确保你在assets/javascripts/application.js删除//= ,例如更改

 //=require turbolinks 

 require turbolinks 

这为我做了诡计。