我想知道,在这种情况下,我想创建一些Web服务类型控制器,是否有一种方法可以“导出”允许从控制器调用哪种方法。我仍然是RoR的新手,它的路由功能,但最终,是否预计功能齐全的RoR应用程序只有数百条路由?并非我创建的每种控制器方法都属于“资源”类别。
答案 0 :(得分:2)
使用routes.rb
文件,您可以为路由创建路由或模式匹配,以及参数化路由和嵌套路由。您应该阅读有关此here的更多信息。
您还可以为路由指定自己的方法名称,例如my_new_route_path
。如果您真的想要,您可以将路由硬编码到HTML中。请不要这样做。
每个控制器操作都需要映射到它的路由。
答案 1 :(得分:2)
Rails路由有多种类型 - RESTful路由只是碰巧为Rails资源提供本机支持的路由。请记住,可以修改事件资源路由以包含成员和收集路由:
# routes.rb
resources :products do
member do
get 'short' #=> products/:product_id/short/:id
post 'toggle' #=> products/:product_id/toggle/:id
end
collection do
get 'sold' #=> products/sold
end
end
您还可以在其他资源路径中嵌套资源路由:
# routes.rb
resources :products do
resources :comments #=> RESTful routes patterned as products/:product_id/comments/:id/:action
resources :sales do
get 'recent', :on => :collection
end
end
另一个方便的功能是命名路由。以下路线不资源丰富:
# routes.rb
match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase # Creates route path akin to purchase_path(:id)
命名空间路由对于组织和可读性非常有用:
# routes.rb
namespace :admin do
resources :products #=> RESTful routes patterned as admin/products/:product_id/:action
end
所以,基本上,无论是REST还是资源丰富,都有一条路可以做你想做的一切。但是是的,你需要为你希望暴露给你的应用的每个动作写一条路线。