2016-01-13 42 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

相關問題