2010-10-07 40 views
1

我們正在將一個站點從專有框架遷移到Ruby on Rails(v2.3)。目前的框架有時會將/基於/ URL放在URL的起始處,因爲沒有明顯的原因,我希望現有的URL能夠正常工作,即使我們不會再放棄它。在映射路由之前是否可以預處理URL?

我目前的解決方案,我不喜歡,就是一旦主地圖上,一旦確定對「基地」範圍的路由:

def draw_routes(map) 
    # do my routing here 
end 

ActionController::Routing::Routes.draw do |map| 
    map.with_options :path_prefix => '/base' do |base| 
    draw_map(base) 
    end 

    draw_map(map) 
end 

我想要做的是什麼東西如:

ActionController::Routing::Routes.draw do |map| 
    map.strip 'base' 

    # do my routing here 
end 

是否有解決方案?

回答

3

你可以編寫一箇中間件從url中刪除基礎。 在LIB/remove_base.rb:

class RemoveBase 
    def initialize(app) 
    @app = app 
    end 

    def call(env) 
    env['REQUEST_PATH'].gsub!(/^\/base/, '') 
    env['PATH_INFO'].gsub!(/^\/base/, '') 
    env['REQUEST_URI'].gsub!(/^\/base/, '') 
    @status, @headers, @response = @app.call(env) 
    [@status, @headers, self] 
    end 

    def each(&block) 
    @response.each(&block) 
    end 
end 

和配置加入這一行/ environment.rb中

config.middleware.use "RemoveBase" 

我在2.3.8與雜種測試它,它似乎工作。

0

我認爲,你可以簡單地這樣做:

map.connect 'base/:controller/:action/:id' 

應當路線,你到正確的控制器,動作和id。

+0

啊 - 應該說,我沒有使用標準:controller /:action /:id路由。我有一長串我不想重複的map.connect語句。 – Simon 2010-10-07 09:10:46

相關問題