Миграция с Drupal на Rails - Маршрутизация - PullRequest
2 голосов
/ 05 декабря 2009

Я разработал новый сайт Ruby on Rails для своей организации. Я хочу, чтобы новый сайт Rails перехватывал входящие запросы, предназначенные для старого сайта, и отображал для пользователя сообщение о том, что новый сайт запущен, ссылку на новый URL-адрес, на который они, скорее всего, пытались добраться, и напоминание обновить закладки.

Так что я довольно зелен, когда дело доходит до маршрутизации рельсов, поэтому я спрашиваю, как бы вы это сделали. Есть ли «рельсовый путь»?

Вот мои мысли до сих пор.

Старый сайт не использует чистые URL, поэтому каждый запрос направляется на маршрут по умолчанию, который на новом сайте представляет собой контроллер home со строкой запроса. Я думал в контроллере, что могу проверить, установлен ли params[:q], а затем, в зависимости от параметра q, найти и отобразить информационную страницу, направляющую пользователя к новой ссылке. Если параметр q не имеет смысла (меня не интересует перехват каждой страницы на старом сайте, только важные), перенаправьте на пользовательскую страницу 404, информирующую пользователя о том, что ссылка была, вероятно, для старого сайта, и дайте пользователь поисковой страницы.

Есть мысли, есть ли лучший способ?

Я ценю любой вклад.

Спасибо

Ответы [ 2 ]

1 голос
/ 06 декабря 2009

В вашем контроллере Rails, отвечающем за домашнюю страницу (скажем, это HomeController), добавьте before_filter так:

class HomeController < ActionController::Base
  before_filter :handle_drupal_requests, :only => :index

Затем добавьте сам метод-обработчик handle_drupal_requests примерно так.

class HomeController < ActionController::Base
  before_filter :handle_drupal_requests, :only => :index

  # ... other code ...

private
  def handle_drupal_requests
     if params[:q].present?
        flash[:notice] = "You're being redirected because blah."
        redirect_to convert_drupal_url(params[:q]), :status => 301
     end
  end

  def convert_drupal_url(query_string)
     # your logic for converting query string, for example:
     item, id = query_string.split('&').last.split('=')
     item_controller = item.underscore.split('_').first.pluralize
     {:controller => item_controller, :action => "show", :id => id}
  end
end
1 голос
/ 05 декабря 2009

Существует ли согласованный способ изменения URL-адресов? Например, /?q=pie становится /dessert/pie?

Если нет, и это требует какого-то ручного запроса к базе данных, вам придется делать это так, как вы упомянули. Я бы создал действие redirect, которое ловит все пути, чтобы отделить его от вашего действия home / index.

Кроме того, если вы заботитесь о соке SEO, обязательно используйте редирект 301:

redirect_to dessert_url, :status=>301

Затем вам нужно будет выполнить мгновенное перенаправление (нет промежуточной страницы с надписью «обновите вашу закладку»). Что бы я сделал, это мгновенное перенаправление и поместил флэш-сообщение [: note] с надписью «пожалуйста, обновите свои закладки».

Пожалуйста, опубликуйте несколько примеров URL, если вам нужны более прямые примеры.

...