2015-12-04 96 views
0

resourcesnamespace有什么区别?Rails路由中的资源vs命名空间

我在gem内有Rack应用程序,我想从Rails应用程序拨打电话。

namespace :app do 
    get 'go', to: Gem::Controller.new 
end 

因为我有控制器叫做AppController,我可以使用这个吗?

resources :app do 
    collection do 
    get 'go', to: Gem::Controller.new 
    end 
end 

哪种方式更好?

回答

1

由于每Rails guide routing section

资源:

资源路由允许您快速申报所有常见的 路线对于给定的足智多谋的控制器。而不是声明 单独的路线为您的索引,显示,新建,编辑,创建,更新和销毁操作,一个足智多谋的路线声明他们在 单行代码。

命名空间:

你不妨组织一个命名空间下的控制器组。大多数 通常,您可能将 下的一些管理控制器归入Admin ::命名空间。您可以将这些控制器放置在 app/controllers/admin目录下,并且可以将它们组合到 路由器中。

如:

namespace :admin do 
    resources :articles, :comments 
end 

但是,我认为你的意思是收集和命名空间之间进行选择。

就是这样,如果您打算为该应用程序添加更多路由,命名空间将是更好的选择。否则,您可以将其作为集合使用。

1

resources是生成REST接口所​​需的七条路由的快捷方式。

所以resources :app会产生以下七路(补丁,并把路线相同):

get "apps"   => "apps#index", :as => 'apps' 
get "apps/:id"  => "apps#show", :as => 'app' 
get "apps/new"  => "apps#new",  :as => 'new_app' 
post "apps"   => "apps#create", :as => 'apps' 
get "apps/:id/edit" => "apps#edit", :as => 'edit_app' 
patch "apps/:id"  => "apps#update", :as => 'app' 
put "apps/:id"  => "apps#update", :as => 'app' 
delete "apps/:id"  => "apps#destroy", :as => 'app' 

,然后它会产生因为get 'go', to: Gem::Controller.new另一条路线:

/apps/go

万一命名空间apps将不会创建7个REST路由,但会生成apps/go的命名路由。