我收到以下错误:
未知行动
没有任何行动回应展示。操作:激活,销毁,索引,org_deals,搜索和暂停
控制器:
class Admin::HomepagesController < Admin::ApplicationController
def org_deals
@organization = Organization.find(:all)
end
路线:
map.root :controller => 'main'
map.admin '/admin', :controller => 'admin/main'
map.namespace :admin do |admin|
admin.resources :organizations, :collection => {:search => :get}, :member => {:suspend => :get, :activate => :get}
注意:这是控制器内部的控制器。
知道为什么这是默认显示?
更新
我更新了路由语法。阅读那篇文章,并尝试了很多变化,但它仍然坚定地寻找一个节目。
答案 0 :(得分:3)
首先,您的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
排除“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"}
答案 1 :(得分:0)
通过指定admin.resources ...
您告诉Rails,您需要应用程序中的七个默认不同路由。如果您不想要它们,并且只想要指定的那些,请不要使用.resources
。调用Show是因为当您拥有默认资源时,这是为具有/admin/id
路径的GET请求调用的默认路由。