Я смог заставить ваш пример работать почти без изменений. Это позволило мне сделать то, что вы описали:
before do
@prefix = "test"
end
get %r{#{@prefix}(\d+)} do |c|
puts "#{@prefix} #{c}"
erb :test, :locals => {:id => c}
end
Затем я запустил дробовик, чтобы проверить вывод, и вызвал / test123. Выход был:
тест 123
Мое мнение также подтвердило, что это работает правильно. Если проблема заключается в том, что URL-адрес не фиксируется, вам может потребоваться реорганизовать свою структуру так, чтобы она выглядела следующим образом:
before do
@prefix = "test"
end
get "/#{@prefix}/:id" do
puts "#{@prefix} #{params[:id]}"
erb :test, :locals => {:id => params[:id]}
end
Я не знаю, возможно ли последнее для вашего приложения, но если вы недостаточно конкретны в маршрутизации, вы оставляете себя открытым для частых неудачных матчей. По моему опыту, чем более RESTful ваше приложение, тем лучше вы будете, когда придет время писать эти типы операций.
В качестве альтернативы, возможно, файл YAML для хранения ваших настроек и последующего анализа сценарием даст вам лучшие результаты для маршрута. Например, файл YAML с таким содержимым:
prefix: test
А затем вспомогательный скрипт, который анализирует это, и будет выглядеть примерно так:
helpers do
def config
@config = YAML.load_file("config.yml")
end
end
Затем вы можете заменить свой блок до этого на:
before do
@prefix = config["prefix"]
end
Мои вкусы кодирования заставляют меня склоняться к использованию метода YAML, но я думаю, что любое из этих решений должно быть жизнеспособным.