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
答案 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
不能确定这是否有效,但似乎有可能。