0

我正在处理一项任务,其中包括向 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

非常感谢你的帮助!

4

1 回答 1

1

如果您使用的是 RESTful 路由,为什么不使用 Rails 默认路由?

所以你routes.rb看起来像

namespace :admin do
  resources :content
  resources :advanced
  resources :categories
  resources :comments
  ...
  <etc>
end

这确实假设您的所有控制器都在文件夹中admin(但从您的评论来看,情况似乎如此。

如果你这样做,你可以使用标准的 route-helper: 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  

哪个恕我直言更具可读性。

但我的建议是,除非你真的真的需要避免它,否则我会使用标准resources,因为你似乎没有添加任何特别的东西。

HTH。

于 2013-03-17T15:22:08.500 回答