Перенаправление устаревших маршрутов приводит к ошибке картографа с помощью rake - PullRequest
0 голосов
/ 04 июня 2011

rout.rb:

Myapp::Application.routes.draw do
  root :to => "posts#index"
  match "posts/autocomplete_topic_name", :as => "autocomplete_topic_name"
  match "/new" => "posts#new", :as => :new
  # resources
  resources :topics
  resources :posts
  resources :comments
  # static
  match "/about"   => "pages#about",   :as => :about
  match "/help"    => "pages#help",    :as => :help
  match "/home"    => "home#index",    :as => :home
  # redirects
  match "/tags" => redirect("/topics")
  match "/entries" => redirect("/posts")
  match "/comments" => redirect("/")
end

В конце rake routes появляется сообщение об ошибке:

              tags        /tags(.:format)                          {:to=>#<Proc:0x00000001485d18@/home/basicobject/.rvm/gems/ruby-1.9.2-p180/gems/actionpack-3.0.6/lib/action_dispatch/routing/mapper.rb:366 (lambda)>}
            entries        /entries(.:format)                       {:to=>#<Proc:0x0000000133d438@/home/basicobject/.rvm/gems/ruby-1.9.2-p180/gems/actionpack-3.0.6/lib/action_dispatch/routing/mapper.rb:366 (lambda)>}
                           /comments(.:format)                      {:to=>#<Proc:0x000000012e8708@/home/basicobject/.rvm/gems/ruby-1.9.2-p180/gems/actionpack-3.0.6/lib/action_dispatch/routing/mapper.rb:366 (lambda)>}

Я пытаюсь перенаправить некоторые устаревшие маршруты на новые маршруты длялучше SEO.Маршруты типа:

/entries/8 необходимо перенаправить на /posts/8 и так далее.

Ответы [ 2 ]

1 голос
/ 04 июня 2011

Вставь это в свой application_controller.rb

rescue_from ActionController::RoutingError do |exception|
  flash[:error] = "Sorry, we were not quite sure where you were trying to go"
  redirect_to root_url
end
0 голосов
/ 05 февраля 2013

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

Попробуйте это

match "/entries/:post_id" => redirect("/posts/%{post_id}")

Это передаст ваш параметр, а также выдаст правильный код ошибки HTTP, поэтому Google обновит свой индекс.

...