rails路由到子文件夹中的控制器?

时间:2016-04-28 10:42:22

标签: ruby-on-rails routes

我要求任何网址:www.servername.com/api/foo/bar/parameters

其中:

  • api是静态的
  • foo是控制器
  • bar是行动
  • parameters是params

映射到api目录

中的控制器
  

api目录位于控制器目录

为了实现这一点,我做了以下代码,但它没有工作。有什么建议吗?

 namespace :api do
   match "/api/:controller(/:action(/*params))", via: [:get, :post]
 end

4 个答案:

答案 0 :(得分:1)

我不知道有什么问题:

get '/api/:controller/(:action(/*path))'

将产生以下路线:

  

GET /api/:controller(/:action(/*path))(.:format):controller#:action

高级动态规则是(见docs):

get ':controller/(:action(/*path))', controller: /api\/[^\/]+/

导致:

  

api GET:controller(/:action(/ * path))(:format)(? - mix:api / [^ /] +)#:action

答案 1 :(得分:0)

你应该有类似下面的内容,如果你需要稍后更改,最好有版本,所以你以后可能会有v2:

scope 'api', module: :api, constraints: { format: :json } do
  namespace :v1 do
    match ":controller(/:action(/*params))", via: [:get, :post]
  end
end

请注意,api在匹配路由部分中不存在,仅在范围内

更改后

尝试运行rake routes检查您的路线的样子。

答案 2 :(得分:0)

如果您在controllers文件夹中有文件夹api,则会输入:

namespace :api do
    match ":controller(/:action(/*params))", via: [:get, :post]
end

你把/ api / in url导致路由指向:

www.servername.com/api/api/foo/bar/parameters

重要提示:Match deprecation

答案 3 :(得分:0)

你可以试试这个。

namespace :api do
   match ':controller/:action/*params', via: [:get, :post]
end