我正在学习MOOC,本练习的目标是为错字添加新功能,我可以将两篇文章合并到一起。Routes on Rails应用程序失败
当我添加路由到我的新功能合并到routes.rb我失去了删除文章的功能。我认为这里有些冲突,但我不知道是什么。
原来的routes.rb:
%w{advanced cache categories comments content profiles feedback general pages
resources sidebar textfilters themes trackbacks users settings tags redirects seo post_types }.each do |i|
match "/admin/#{i}", :to => "admin/#{i}#index", :format => false
match "/admin/#{i}(/:action(/:id))", :to => "admin/#{i}", :action => nil, :id => nil, :format => false
end
此方法articles.rb删除
def delete_url
blog.url_for(:controller => "/admin/content", :action =>"destroy",:id => id)
end
正确的URL创建正确的网址:
http://example.com/admin/content/destroy/7
如果我按照这个链接我可以成功删除一篇文章。
但是,如果我在这之前我的routes.rb中添加如下内容:
namespace "admin" do
resources :content do
post :merge, on: :member, as: :merge
end
end
新的合并功能和形式都工作正常,但该方法delete_url
现在生产这样的事情:
http://example.com/admin/content/7
,如果我按照这个方法创建一个链接,我得到:
Unknown action
The action 'show' could not be found for Admin::ContentController
也许我正在覆盖一些东西?我无法弄清楚这里发生了什么,以及为什么这会影响删除操作/路由。
在此先感谢!
编辑:耙路线| grep的内容:
与原来的routes.rb给我:
admin_content /admin/content {:controller=>"admin/content", :action=>"index"}
/admin/content(/:action(/:id)) {:action=>nil, :id=>nil, :controller=>"admin/content"}
而我修改routes.rb中产生
merge_admin_content POST /admin/content/:id/merge(.:format) {:action=>"merge", :controller=>"admin/content"}
admin_content_index GET /admin/content(.:format) {:action=>"index", :controller=>"admin/content"}
POST /admin/content(.:format) {:action=>"create", :controller=>"admin/content"}
new_admin_content GET /admin/content/new(.:format) {:action=>"new", :controller=>"admin/content"}
edit_admin_content GET /admin/content/:id/edit(.:format) {:action=>"edit", :controller=>"admin/content"}
admin_content GET /admin/content/:id(.:format) {:action=>"show", :controller=>"admin/content"}
PUT /admin/content/:id(.:format) {:action=>"update", :controller=>"admin/content"}
DELETE /admin/content/:id(.:format) {:action=>"destroy", :controller=>"admin/content"}
/admin/content {:controller=>"admin/content", :action=>"index"}
/admin/content(/:action(/:id)) {:action=>nil, :id=>nil, :controller=>"admin/content"}
你能发布你的实际链接吗?即你调用'delete_url'的'link_to'我怀疑你只需要添加'method::delete'就可以了。 –
另外,你可以发布运行'rake routes |的输出grep内容“?另外,'admin/content_controller.rb'会对我们有所帮助。 –