我正在guides.rubyonrails.org上发布官方Rails指南,并且我遇到了以下错误:
当我在浏览器地址栏中输入路径时,没有路由匹配[GET]" / articles / 8 / destroy" 。单击模板文件中的链接,不会删除已传递ID的文章,只需重定向到它(文章)。 Rails版本是4.2.1,数据库是sqlite,工作环境是Windows 7。
销毁方法如下:
def destroy
@article = Article.find(params[:id])
@article.destroy
redirect_to articles_path
end
Rake路线输出是:
articles_path GET /articles(.:format) articles#index
POST /articles(.:format) articles#create
new_article_path GET /articles/new(.:format) articles#new
edit_article_path GET /articles/:id/edit(.:format) articles#edit
article_path GET /articles/:id(.:format) articles#show
PATCH /articles/:id(.:format) articles#update
PUT /articles/:id(.:format) articles#update
DELETE /articles/:id(.:format) articles#destroy
root_path GET / welcome#index
我检查过拼写错误,即使是c / p所有来源,结果也一样。和想法?
编辑:添加删除链接
删除链接如下:
<%= link_to 'Destroy', article_path(article),
method: :delete,
data: { confirm: 'Are you sure?' } %>
views / layouts /中application.html.erb的内容如下:
<!DOCTYPE html>
<html>
<head>
<title>Blog</title>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'default', 'data-turbolinks-track' => true %>
<%= csrf_meta_tags %>
</head>
<body>
<%= yield %>
</body>
</html>
javascript_include_tag&#39;默认&#39;已从&#39;应用程序&#39;更改到了#defaul&#39;,另外我得到了coffeescript错误。
答案 0 :(得分:2)
您的路线显示DELETE /articles/:id(.:format) articles#destroy
。这意味着它期待HTTP DELETE
方法。
要使/articles/8/destroy
工作,您的路线应按照以下方式定义:
get '/articles/:id/destroy' => 'articles#destroy'
但是,不是推荐的方法,而是确保在your delete link中设置删除方法。
如果您想手动测试,可以尝试使用curl或Chrome插件postman等工具。
这两个工具都允许您指定要使用的HTTP方法。如果您通过浏览器发出直接请求,您所做的只是发送GET
请求。
答案 1 :(得分:0)
当您在网址中点击此/articles/8/destroy
时,会将其视为get
请求,因为您可以看到错误。 没有路线匹配[GET]&#34; / articles / 8 / destroy&#34;
但是DESTROY操作在rails中接受delete
请求,您也可以在路径中看到。现在我不确定你是如何从模板触发的,但考虑到你的文章在对象article
<%= link_to "Delete", article, method: :delete, data: { confirm: 'Are you sure?' } %>
答案 2 :(得分:0)
正如这条线所述:
DELETE /articles/:id(.:format) articles#destroy
服务器期望DELETE
请求触发控制器中的destroy
方法。这样的事情,从轨道上的每个指南应该做:
<%= link_to 'Destroy', @article, method: :delete,
data: { confirm: 'Are you sure?' } %>
使用link_to
方法的delete
助手会创建一个隐藏的表单,并在点击时提交。
答案 3 :(得分:0)
确保在应用程序中包含用于jQuery的Rails不显眼的脚本编写适配器。否则,使用method: :delete
创建的链接将无法正确处理。
这是通过JavaScript文件jquery_ujs完成的,当您生成应用程序时,该文件会自动包含在应用程序的布局(app / views / layouts / application.html.erb)中。