Rails:有没有办法在运行时为路由指定控制器?

时间:2016-01-13 01:21:42

标签: ruby-on-rails ruby-on-rails-3

Rails:有没有办法在运行时为路由指定控制器?

我正在开发一个版本化的API,并希望路径能够以与捆绑器工作方式相同的方式解析到控制器,例如找到最高版本控制器< =路由中要求的版本...

因为两个索引之间存在无限个次要版本,所以我不希望使用明确路由进行静态路由。我希望有一种方法可以使用块来将传入的请求映射到适当的控制器。

Given 
/app/controllers/api/v1.5.2/users_controller.rb
/app/controllers/api/v2.3.5/users_controller.rb

Route
GET /api/v1.5.2/user --> ~/v1.5/users_controller.rb
GET /api/v1.6.1/user --> ~/v1.5/users_controller.rb
GET /api/v1.7.7/user --> ~/v1.5/users_controller.rb
...
GET /api/v2.3/user --> ~/v2.3/users_controller.rb

1 个答案:

答案 0 :(得分:-1)

也许一条全能的路线都可以解决这个问题....这绝对是一个小问题,但它是第一个想到的解决方案。

get 'api/*args' => 'api#show'

class ApiController < ApplicationController
  def show
    args = params[:args].split("/")
    version = args[0].classify
    resource = args[1].classify
    # not sure what params to pass in, so you'll have to figure that out
    "Api::#{version}::#{resource}".constantize.new([params]).show
  end
end

不能确定这是否有效,但似乎有可能。