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=>"Are you sure?"}" 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
-
在html页面添加包含js,因为删除function将使用js来处理。
<%= javascript_include_tag "application" %>
-
将
skip_before_action :verify_authenticity_token
添加到控制器,以防AdsController中的InvalidAuthenticityToken#destroy -
添加link_to到您的网页
<%= link_to 'Delete', post, method: :delete, data: {confirm: "Are you sure?"}%>
现在,我可以使用link_to从我的页面删除logging。
确保你在assets/javascripts/application.js
删除//=
,例如更改
//=require turbolinks
至
require turbolinks
这为我做了诡计。