【发布时间】:2013-08-11 20:54:39
【问题描述】:
我正在完成入门教程(创建博客),但 link_to Destroy 无法正常运行。在终端中,它总是将其解释为#SHOW。
在阅读类似问题时,我了解到必须将 Delete 转换为 POST 以便浏览器对其进行解释。这似乎没有发生。
我在 Lynda.com Rails 课程中使用 Destroy 时也遇到了同样的问题,所以它让我相信这是我的开发环境中的问题。我正在为 MacBook Pro Lion 上的 HTTP 服务器使用 Rails 4、Ruby 2.00p274、MySQL、WEBrick。
在选择 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
【问题讨论】:
-
显示你的 layouts/application.html.erb 和 app/assets/application.js。
-
您必须使用默认包含在新 Rails 应用程序中的
jquery_ujs库来使:delete方法按预期发送到端点。 -
@ssorallen:将其发布为答案!我遇到了完全相同的问题,给出的答案并没有帮助,但是将 jquery_ujs 包含到文件
application.js中确实为我解决了这个问题。迁移时可能只是个问题...
标签: ruby-on-rails