在RoR中,我是否必须手动将每个控制器方法指定为路径?

时间:2013-06-12 03:42:52

标签: ruby-on-rails

我想知道,在这种情况下,我想创建一些Web服务类型控制器,是否有一种方法可以“导出”允许从控制器调用哪种方法。我仍然是RoR的新手,它的路由功能,但最终,是否预计功能齐全的RoR应用程序只有数百条路由?并非我创建的每种控制器方法都属于“资源”类别。

2 个答案:

答案 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还是资源丰富,都有一条路可以做你想做的一切。但是是的,你需要为你希望暴露给你的应用的每个动作写一条路线。