0

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

4

2 回答 2

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

所以,基本上,你想做的每件事都有一条路线,不管它是 RESTful/resourceful 与否。但是,是的,您需要为要向应用程序公开的每个操作编写一个路由。

于 2013-06-12T04:19:44.603 回答
2

使用该routes.rb文件,您可以为路由以及参数化路由和嵌套路由创建路由或模式匹配。您应该在此处阅读有关此内容的更多信息。

您还可以为路由指定自己的方法名称,例如my_new_route_path. 如果你真的想要,你可以将路由硬编码到你的 HTML 中。请不要这样做。

每个控制器操作都需要映射到它的路由。

于 2013-06-12T03:47:20.567 回答