首先,您的routes 文件似乎有错误的语法。如果您尝试为嵌套资源建立路由,您可以这样做:
map.resources :admin
admin.resources :organizations
end
这将为您提供如下路径:
/admin/
/admin/1
/admin/1/organizations
/admin/1/organizations/1
从路由到控制器/动作的映射是通过 Rails 约定完成的,其中 HTTP 动词以对典型 CRUD 操作有用的方式分配。例如:
/admin/1/organizations/1
将映射到 OrganizationsController 中的多个操作,以动词类型区分:
/admin/1/organizations/1 # GET -> :action => :show
/admin/1/organizations/1 # PUT -> :action => :update
/admin/1/organizations/1 # DELETE -> :action => :destroy
“显示”是 Rails 默认为您提供的七个标准资源操作之一。例如,您可以使用指令 :except => :show 排除“显示”,或者仅使用 :only => :update 指定您想要的资源操作。
我建议你看看Rails Routing from the Outside In,这是对这个主题的一个很好的介绍。
编辑
我看到我忽略了答案中的命名空间,抱歉。这个怎么样:
map.namespace(:admin) do |admin|
admin.resources :homepages, :member => { :org_deals => :get }
end
这会将您的org_deals 操作生成为带有 id 参数的 GET(用于组织)。您还将获得show 路线以及其他六条资源丰富的路线。 rake routes 显示:
org_deals_admin_homepage GET /admin/homepages/:id/org_deals(.:format) {:controller=>"admin/homepages", :action=>"org_deals"}
当然你的homepages_controller.rb必须住在app/controllers/admin/
编辑 redux
实际上,你希望organizations 在路径中,我敢打赌,在这种情况下:
map.namespace(:admin) do |admin|
admin.resources :organizations, :controller => :homepages, :member => { :org_deals => :get }
end
给你:
org_deals_admin_organization GET /admin/organizations/:id/org_deals(.:format) {:controller=>"admin/homepages", :action=>"org_deals"}