Я хочу создать направляющие 3 маршрута с совершенно дополнительными параметрами. Пример поврежденный маршрут:
match '(/name/:name)(/height/:height)(/weight/:weight)' => 'people#index'
Который приводит к получению 'rake:routes':
/ (/name/:name) (/height/:height) (/weight/:weight)
И таким образом добавляя начальную наклонную черту ко всем ссылкам:
<a href="//name/kevin">...</a>
Маршрут работает, если я указываю его как:
match '/people(/name/:name)(/height/:height)(/weight/:weight)' => 'people#index'
Но я хочу иметь это как корневой URL (как с первым примером, который не работает).Спасибо.
Я не знаю, можно ли это сделать с помощью механизма маршрутизации Rails, но вы можете добавить собственное промежуточное ПО в свой стек, и оно должно работать нормально.
Поместите это в lib / custom_router.rb
class CustomRouter
def initialize(app)
@app = app
end
def call(env)
if env['REQUEST_PATH'].match(/^\/(name|height|weight)/)
%w(REQUEST_PATH PATH_INFO REQUEST_URI).each{|var| env[var] = "/people#{env[var]}" }
end
@app.call(env)
end
end
и добавьте
config.middleware.use "CustomRouter"
в свой config / application.rb
.
Затем вы можете установить маршрут как
match '/people(/name/:name)(/height/:height)(/weight/:weight)' => 'people#index'
, и он будет работать.
Работает ли это, если вы используете отдельное корневое сопоставление?
root :to => 'people#index'
match '(/name/:name)(/height/:height)(/weight/:weight)' => 'people#index'
Это действительно серьезный упущение в новой системе маршрутизации.
Может быть способ взломать его с помощью промежуточного программного обеспечения стойки (возможно, переопределив Rack :: URLMap), но это немного не для меня.