Создание псевдонима (то есть второго имени) для модели в Rails - PullRequest
1 голос
/ 17 января 2012

У меня есть рабочий сайт Rails 2.3.5, и я хотел бы изменить название модели на что-то, что будет выглядеть намного лучше в URL. Я знаю, что простой способ сделать это в маршрутах.rb, как это:

map.resources :announcements, :as => :posts

Однако мне нужно также поддерживать старое имя, так как мы работаем и не можем иметь мертвые ссылки. Просто использование «: как» не собирается сокращать его.

Я в основном ищу способ перенаправления так:

http://mysite.com/announcements/23

перенаправляет на

http://mysite.com/posts/23

Вероятно, это возможно сделать через Apache, но я не могу понять правила переписывания. Я подумал, что, возможно, router.rb будет более простым способом. Там тоже не повезло.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 06 мая 2012

Я закончил тем, что нашел решение, которое работает довольно хорошо.

Я добавил :as => :posts в мой route.rb, который заставляет всех помощников создавать ссылки на новые URL-адреса.Затем я выяснил правило mod_rewrite для обработки перенаправлений, чтобы в интернете не было неработающих ссылок.Вот что я добавил в свою конфигурацию Apache:

RewriteEngine On    
RewriteRule ^/announcements(.*) /posts$1 [R=301,L]
0 голосов
/ 06 мая 2012

Как насчет добавления маршрута два раза. С опцией :as и без?

//routes.rb
map.resources :announcements
map.resources :announcements, :as => :posts
0 голосов
/ 17 января 2012

Зависит от того, что мы подразумеваем под «редиректом». Похоже, что наиболее эффективный способ - взять ваш контроллер сообщений и добавить перенаправления в объявления, а контроллер объявлений должен обрабатывать страницы.Итак, в PostsController:

def index
  redirect_to 'announcements#index'
end

и так далее.Это дает вам устаревшую поддержку старых ссылок столько, сколько вы хотите, и, если когда-нибудь наступит время, когда вы больше не хотите этого, вы можете просто удалить весь контроллер сообщений.

...