Rails使用指向现有控制器操作的路由实现API

时间:2012-06-23 17:34:56

标签: ruby-on-rails routes

我有一个Rails应用程序,可以通过HTML界面完成我需要做的所有事情,现在我想在API上提供对功能的访问。

如何使用Routes.rb选择性地将某些API控制器操作转发到另一个控制器的操作?

我尝试了以下内容:

我的常规控制器路由使用正常工作:

match 'stuff' => 'stuff#index'
get 'stuff/index'
get 'stuff/some_get_action'
post 'stuff/some_post_action'

但是当我尝试使用我的API时:

match 'api' => 'api#index'
match 'api/some_get_action' => 'stuff#some_get_action', :via => :get
match 'api/some_post_action' => 'stuff#some_post_action', :via => :post

...或

match 'api' => 'api#index'
get 'api/some_get_action', :to => 'stuff#some_get_action'
post 'api/some_post_action', :to => 'stuff#some_post_action'

我收到错误。当我导航到/ api / index到服务器的HTML页面包含用于测试API URL的表单时,url_for会引发一个“路由错误”异常,说“没有路由匹配......”。

1 个答案:

答案 0 :(得分:1)

您可能想要包含':as => '并定义您可能用作链接路径的路线名称。

get 'api/some_get_action' => 'stuff#some_get_action', :as => 'some_get_action'

并且索引文件中的链接路径将具有“some_get_action_path”。不确定'匹配'或'获取'会自动解析为路径名,通过设置':as'它肯定会。

我喜欢您设置此页面进行测试的想法。我总是在控制台中进行操作,这肯定比单击链接更困难。您的链接可能需要推断它们是:json请求,而不是:http。