我正在进行一项任务,其中包括向Typo添加一项功能。
rake routes
显示:
admin_content /admin/content {:controller=>"admin/content", :action=>"index"}
/admin/content(/:action(/:id)) {:action=>nil, :id=>nil, :controller=>"admin/content"}
我需要创建一个匹配以下RESTful路由的路由助手:/admin/content/edit/:id
,url的示例是/admin/content/edit/1
但我无法弄明白该怎么做。我试过像admin_content_path(edit,some_article)
这样的东西,但它不起作用。 (some_article只是一篇文章对象)
在routes.rb
档案中:
# some other code
# Admin/XController
%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
#some other code
非常感谢你的帮助!
答案 0 :(得分:1)
如果您正在使用RESTful路由,为什么不使用Rails默认路由?
所以你的routes.rb
看起来像是
namespace :admin do
resources :content
resources :advanced
resources :categories
resources :comments
...
<etc>
end
这确实假设您的所有控制器都在admin
文件夹中(但是从您的评论中可以看出这种情况。
如果你这样做,你可以使用标准的路由助手:edit_admin_content_path
。
如果您想手动执行此操作,则应尝试为路线添加名称。例如。如下:
match "/admin/#{i}/:action(/:id)" => "admin/#{i}", :as => "admin_#{i}_with_action"
然后你应该做像
这样的事情admin_content_with_action(:action => 'edit', :id => whatevvvva)
作为旁注:我真的不喜欢你config/routes.rb
中的元编程,如果你真的发现默认资源不合适,我会建议使用方法代替(正如解释here)
例如,在你的config/routes.rb
中你会写:
def add_my_resource(resource_name)
match "/#{resource_name}", :to => "#{resource_name}#index", :format => false
match "/#{resource_name}(/:action(/:id))", :to => "#{resource_name}", :as => 'admin_#{resource_name}_with_action", :action => nil, :id => nil, :format => false
end
namespace :admin do
add_my_resource :content
add_my_resource :advanced
add_my_resource :categories
...
end
哪个imho 更具可读性。
但我的建议,除非你真的需要避免它,否则将使用标准resources
,因为你似乎没有添加任何特别的东西。
HTH。