resources
和namespace
之间有什么区别?
我在Rack
内有gem
个应用,我想通过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
哪种方式更好?
答案 0 :(得分:2)
资源:
资源路由允许您快速声明所有常见的 给定资源控制器的路由。而不是宣布 索引,显示,新建,编辑,创建,更新和的单独路线 摧毁行动,一条足智多谋的路线在一行中宣告它们 代码。
命名空间:
您可能希望在命名空间下组织控制器组。最 通常,您可以将许多管理控制器分组 Admin ::名称空间。你可以把这些控制器放在 app / controllers / admin目录,你可以将它们组合在一起 你的路由器。
例如:
namespace :admin do
resources :articles, :comments
end
但是,我认为你的意思是在收集和命名空间之间做出选择。
就像这样,如果您计划为该应用程序提供更多路由,则命名空间将是更好的选择。否则,您可以将其用作集合。
答案 1 :(得分: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
七条REST路由,但会生成apps/go
的命名路由。