2016-01-13 61 views
0

Rails:有没有一种方法可以在运行时为路由指定控制器?Rails:有没有一种方法可以在运行时为路由指定控制器?

我正在开发一个版本化的API,并希望路由以与捆绑器工作方式非常相似的方式解析到控制器。找到最高版本控制器< =版本要求的路线......

因为有一个无限数两个指标之间的次要版本,我不想跟explicite路线staticly路线。我希望有一种方法来使用块来映射传入的请求与适当的控制器。

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

也许一条全能的路线会做的伎俩....这绝对是一个小黑客,但它是第一个想到的解决方案。

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 

无法确定这是否可行,但似乎是可能的。

+0

不,我特别不想在加载时创建显式路由。我正在寻找飞行路线。 –

+0

那么也许是一条全线路线。看到编辑答案... – tddrmllr

+0

它似乎没有像这种方法曾经工作 – timstott

相关问题