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

hyp*_*.ca 40 ruby-on-rails

我正在通过入门教程(创建一个博客)和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)
Run Code Online (Sandbox Code Playgroud)

在ports-controller.rb中:

def destroy
    @post = Post.find(params[:id])
    @post.destroy

    redirect_to action: :index
end
Run Code Online (Sandbox Code Playgroud)

在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 %>
Run Code Online (Sandbox Code Playgroud)

在routes.rb中

Blog::Application.routes.draw do
   resources :posts do
     resources :comments
   end
  root to: 'welcome#index'
end
Run Code Online (Sandbox Code Playgroud)

haw*_*awk 52

试试这个

<%= link_to 'Destroy',  post,  method: :delete, data: { confirm: 'Are you sure?' } %>
Run Code Online (Sandbox Code Playgroud)

  • 正如我所说 - 试试吧!我说这是100%的回答.很难从给出的信息中得出结论. (3认同)
  • 我完全糊涂了=)@MarekLipka (2认同)

小智 41

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

//= require jquery
//= require jquery_ujs
Run Code Online (Sandbox Code Playgroud)

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

  • 在核心rails应用程序默认情况下,但不是在创建引擎时 (2认同)

now*_*ils 15

我有同样的问题,对于rails 4.2.X. 检查了我的所有javascript文件,但无法使其正常工作.如果你仔细查看服务器请求,你将在params中缺少'authenticity_token',因此用户会被注销.在rails 4.1及以上版本中,你必须使用button_to而不是link_to


小智 7

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

//= require jquery_ujs
Run Code Online (Sandbox Code Playgroud)


Jas*_*Kim 2

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

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

查看以下 SO 线程