2009-12-05 8 views
2

저는 조직의 새로운 Ruby on Rails 사이트를 개발했습니다. 새 Rails 사이트가 이전 사이트에 대한 수신 요청을 가로 채고 새 사이트가 시작되었음을 나타내는 메시지를 표시하고, 가장 많이 연결하려고 시도한 새 URL 및 알림을 표시하도록합니다. 북마크를 업데이트하십시오.Drupal에서 Rails로 라우팅 - 라우팅

레일이 너무 길어서 어떻게하면 레일을 라우팅 할 수 있는지 묻습니다. '가로장'이 있습니까?

여기까지 내 생각은 있습니다.

이전 사이트에서는 모든 요청이 새로운 사이트의 쿼리 문자열이있는 home 컨트롤러 인 기본 경로로 이동하기 때문에 깨끗한 URL을 사용하지 않습니다. 나는 컨트롤러에서 params[:q]이 설정되어 있는지 테스트하고 q 매개 변수가 무엇인지에 따라 사용자를 새 링크로 안내하는 정보 페이지를 검색하고 렌더링합니다. q 매개 변수가 이해가되지 않는다면 (예전 사이트의 모든 페이지를 잡는 데 신경 쓰지 않고 중요한 것들만) 맞춤 404 페이지로 리디렉션하여 사용자에게 링크가 이전 사이트에 대한 것이 었음을 알리고 사용자에게 검색 페이지.

더 좋은 방법이 있습니까?

모든 입력에 감사드립니다.

감사합니다.

답변

1

과 같이 before_filter 추가 (의 그것 HomeController의 가정 해 봅시다) :

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 
+0

감사 ... 위대한 작품입니다. 지연된 응답에 대해 유감스럽게 생각하며, 다른 문제로 다시 돌아 오기 전에이 문제로 옮겼습니다. – raytiley

1

URL이 변경된 일관된 방법이 있습니까? 예 : /?q=pie/dessert/pie?

만약 수동 데이터베이스 쿼리가 필요하다면, 언급 한대로해야 할 것입니다. redirect 액션을 생성하여 모든 경로를 포착하여 홈/인덱스 동작과 분리 된 상태로 유지합니다. 그런 다음 (어떤 중간 페이지가 '북마크를 업데이트'말 없음) 즉시 리디렉션을 수행해야

redirect_to dessert_url, :status=>301 

: 당신은 SEO 주스 신경 경우

또한, 301 리디렉션을 사용해야합니다. 내가 할 수있는 일은 즉각적인 리다이렉트이며 "즐겨 찾기를 업데이트하십시오"라는 flash [: notice] 메시지를 넣는 것입니다.

직접적인 예가 더 필요하면 URL 예제를 게시하십시오. 홈페이지에 대한 책임 레일즈 컨트롤러에서

+0

웹 서비스에서 내용을 동적으로로드하고 관련 리소스의 ID를 쿼리 문자열에 전달하는 것에 대해 우려하는 URL입니다. 예를 들어 /? q = node12 & ShowID = 100이면 ID가 100 인 프로그램의 쇼 정보를 표시하는 페이지로 이동합니다. – raytiley

+0

*** 위의 덧글에 추가 *** 위의 리소스가 될 새로운 URL 지도는/shows/100이됩니다. 자원의 ID는 두 사이트간에 보존됩니다. – raytiley

+0

좋습니다. 하쿠 닌은 좀 더 구체적인 예를 제시했다. 이전 URL에 쿼리 문자열 (예 :/some/path? q = 1) 외에 경로가있는 경우 before_filter를 application_controller.rb에 넣어야합니다.그렇다면 경로에 대해 걱정하지 않아도됩니다. 오래된 URL을 잡아라. – lamplighter