Ruby on rails 在RoR中,是否必须手动将每个控制器方法指定为路由?

Ruby on rails 在RoR中,是否必须手动将每个控制器方法指定为路由?,ruby-on-rails,Ruby On Rails,我想知道的是,在本例中,我想创建一些web服务类型的控制器,是否有一种方法可以“导出”允许从控制器调用什么方法。我对RoR和它的routes功能仍然很陌生,但最终,一个功能齐全的RoR应用程序是否只需要几百条路由呢?并非我正在创建的每个控制器方法都属于“资源”类别。使用routes.rb文件,您可以为路由、参数化路由和嵌套路由创建路由或模式匹配。你应该多读一些这方面的内容 您还可以为路由指定其自己的方法名称,例如my\u new\u route\u path。如果你真的想,你可以把路由硬编码到你

我想知道的是,在本例中,我想创建一些web服务类型的控制器,是否有一种方法可以“导出”允许从控制器调用什么方法。我对RoR和它的routes功能仍然很陌生,但最终,一个功能齐全的RoR应用程序是否只需要几百条路由呢?并非我正在创建的每个控制器方法都属于“资源”类别。

使用
routes.rb
文件,您可以为路由、参数化路由和嵌套路由创建路由或模式匹配。你应该多读一些这方面的内容

您还可以为路由指定其自己的方法名称,例如
my\u new\u route\u path
。如果你真的想,你可以把路由硬编码到你的HTML中。请不要这样做


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

使用
routes.rb
文件,您可以为路由、参数化路由和嵌套路由创建路由或模式匹配。你应该多读一些这方面的内容

您还可以为路由指定其自己的方法名称,例如
my\u new\u route\u path
。如果你真的想,你可以把路由硬编码到你的HTML中。请不要这样做


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

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/足智多谋。但是是的,你需要为你想暴露在你的应用程序中的每一个动作编写一个路由。

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/足智多谋。但是是的,你需要为你想公开给你的应用程序的每个动作写一个路由。

你应该为你想使用的每个URL写路由,是的。您的绝大多数路线都应该在资源项下。如果这是RoR开发人员的期望,那么这就是我要做的:D谢谢。希望你能为你想使用的每个URL写路由,是的。您的绝大多数路线都应该在资源项下。如果这是RoR开发人员的期望,那么这就是我要做的:D谢谢。Sevensacat也帮助回答了这个问题。在某些情况下,我希望路由“硬编码”(外部应用程序/客户端)。我现在明白了,仅指定路线是RoR mo。谢谢!Sevensacat也帮助回答了这个问题。在某些情况下,我希望路由“硬编码”(外部应用程序/客户端)。我现在明白了,仅指定路线是RoR mo。谢谢!尽管这两个答案都给了我正确的信息,但这一个给了我名称空间的提示。我喜欢。:)尽管这两个答案都给了我正确的信息,但这一个给了我名称空间的提示。我喜欢。:)