Определение всего пути как дополнительные направляющие 3.0.0

Я хочу создать направляющие 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 (как с первым примером, который не работает).Спасибо.

1
задан Kevin Sylvestre 26 June 2010 в 13:26
поделиться

2 ответа

Я не знаю, можно ли это сделать с помощью механизма маршрутизации 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'

, и он будет работать.

2
ответ дан 2 September 2019 в 23:48
поделиться

Работает ли это, если вы используете отдельное корневое сопоставление?

root :to => 'people#index'
match '(/name/:name)(/height/:height)(/weight/:weight)' => 'people#index'

Это действительно серьезный упущение в новой системе маршрутизации.

Может быть способ взломать его с помощью промежуточного программного обеспечения стойки (возможно, переопределив Rack :: URLMap), но это немного не для меня.

0
ответ дан 2 September 2019 в 23:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: