繁体   English   中英

Rails 4 link_to Destroy在“入门”教程中不起作用

[英]Rails 4 link_to Destroy not working in Getting Started tutorial

我正在通过入门教程(创建一个博客)和link_to Destroy无法正常运行。 在终端中,它总是将其解释为#SHOW。

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

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

在选择Destroy时的终端会话中:

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文件,但无法使其正常工作。 如果你仔细查看服务器请求,你将在params中缺少'authenticity_token',因此用户会被注销。 在rails 4.1及以上版本中,你必须使用button_to而不是link_to

我通过添加assets / javascripts / application.js解决了这个问题

//= require jquery_ujs

确保通过rake路由使用Delete 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没有出现在destroy方法中,但会显示出来。 这告诉我它一定是一个糟糕的链接吗? 它甚至没有达到破坏方法。 谢谢大家的答案。 我们确实要尝试不要的东西吗?

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

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

但是到目前为止组合的东西如下所示没有错误,但我仍然没有来自控制器中的destroy方法的binding.pry。

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

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

所以试着找出jquery发生的事情是可疑的。 我可以确认这是我的情况,但其余的我会留给nubes,因为这将显示在谷歌搜索。

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

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

查看以下SO线程

在js中包括以下行

//= require jquery_ujs

包括宝石:

gem 'jquery-rails'

销毁链接:

<%= link_to "Logout", destroy_user_session_path %>

我有同样的问题,并意识到我用-J创建了我的rails应用程序,它与--skip-javascript相同。 您需要启用JavaScript才能实现此功能; 没有弹出窗口确认删除是一个死的赠品。

我确实遇到了这个问题,它是由三次点击Guide的代码块并将代码直接复制/粘贴到我的编辑器(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和未解析的Ruby之间的大差距是由指南中使用的非中断空格(unicode character )复制到脚本中引起的。

我不确定为什么这不会导致脚本解析错误。

我和巴里有同样的问题。 确保在/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 :: Pages错误在页面#home?

在evedovelli回答(关于Windows中的coffeescript gem)。

我遇到了同样的问题。 我通过这种方式锻炼:

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

  1. 在html页面中添加包含js因为删除功能将使用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从我的页面中删除记录。

使用button_to方法而不是link_to似乎有效,减去它没有确认的事实(我觉得这很重要)。

就我而言,我正在使用react-on-rails并具有多种布局。

<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>到我的hello-world布局修复了问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM