2013-06-20 2 views
1

Я хочу перенаправить http://mysite.com/docs/some-old-link to http://mysite.com/docs/some -new-link (некоторая-старая ссылка ушла). Вот что я хочу:Как перенаправить вложенный ресурс в routes.rb в Rails 3

resources :docs, :only => [:index, :show] do 
    member do 
    match "some-old-link" => redirect("some-new-link") 
    end 
end 

Но редирект не происходит, и я просто получить 404 на какой-старой ссылке. Пробовал различные хитрости по этому поводу, но не смог его получить. Как мне это сделать?

+0

вы пробовали печатать на консоли прямо над 'член do', а затем прямо над' матча «некоторые старый -link "=> redirect (" some-new-link ")', чтобы убедиться, что он вызван? – Max

+0

Как насчет соответствия «docs/some-old-link» => redirect («docs/some-new-link») – usha

+0

@Max OK просто попробовал это, и оба печатаются во время запуска рельсов, а не когда запрос сделан (Я предполагаю, что route.rb запускается только один раз при запуске, чтобы инициализировать маршруты). – wildabeast

ответ

4

Во-первых, попробуйте добавить "к" к коду:

match "some-old-link", to: redirect("some-new-link") 

Проблема также может быть:

member do 
    match "some-old-link" => redirect("some-new-link") 
    end 

Ожидается перенаправлять н так:

/docs/id/некоторая-старая ссылка до /docs/ID/некоторые новые линии связи

попробовать использовать коллекции вместо члена

+0

Спасибо! Используемая коллекция вместо члена - это дает мне ошибку: «ERROR URI :: InvalidURIError: схема http не принимает часть реестра: localhost: 3000some-new-link'. Однако 'redirect ("/docs/some-new-link ")' делает трюк. – wildabeast