我正在學習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'會對我們有所幫助。 –