我们正在将站点从专有框架迁移到Ruby on Rails(v2.3)。当前的框架有时会将/ base /放在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
有那种形式的解决方案吗?
答案 0 :(得分:3)
您可以编写中间件以从网址中删除基础。 在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
并在config / environment.rb中添加此行
config.middleware.use "RemoveBase"
我在2.3.8中使用mongrel进行了测试,似乎有效。
答案 1 :(得分:0)
我认为你可以简单地做一些事情:
map.connect 'base/:controller/:action/:id'
那会把你引导到正确的控制器,动作和身份。