호텔에는 부모 영역에 속한 호텔이있는 레일스 3 애플리케이션이 있습니다. 사용자가 mongrel >> nginx에서 제공하는 앱을 조회하면 요청에 사용 된 도메인 이름을 사용하여 제공 할 호텔 영역 (도메인 이름 >> 지역)을 결정합니다. 이를 위해 나는 두 가지 옵션을 볼 수레일스는 모델 인스턴스로 경로 지정 - 도메인 이름으로
1)의 nginx와 함께 URL을 다시 작성, 도메인 이름 뒤에 영역 ID를 삽입 (예를 들어, birminghamhotels.co.uk => proxy_pass http://myupstream/areas/3 $ REQUEST_URI).
이점 : 허용 도메인이 정의 된 도메인 : nginx.conf에서 도메인 간 개체 매핑이 발생합니다. 사용자에게 투명해야합니다 (URL이 다시 작성됨에 따라 예쁜 URL이 가능함).
단점 : 브레이크 레일 URL 헬퍼, 더 이상 link_to 또는 form_for. 하드 코딩 된 객체 참조는 장난입니다.
2) 캐치 도메인 routes.rb의 이름과 각 지역 (심지어 has_many 당신이 경우 공상)에 대해 고유 한 "도메인"속성을 통해 지역을 찾아보십시오.
이점 : 모든 Rails URL 도우미를 사용할 수 있어야합니다. 요청 된 도메인이 리소스에 직접 링크되므로 예외를 처리 할 수 있습니다.
단점 : Nginx에있는 URL을 다시 작성하지 않고은 사용자가 볼 것입니다 : 대신 birminghamhotels.co.uk/hotels/42의 birminghamhotels.co.uk/areas/3/hotels/42을? 또한, 나는 그것을하는 방법을 모른다!
그래서, 옵션 # 1을 시도했지만 내가 옵션 # 2를 시도하는 방법을 마련하려했지만 정확한을 조사해내는 수 없었던 등 URL 헬퍼에 문제로 실행했습니다 많은 ogling에도 불구하고 구문. 이제 검색을 통해 답을 찾을 수 없다는 사실로 인해이 문제의 끝이 잘못되었다고 생각하게됩니다. 세 번째 옵션이 있습니까? 어떻게 해결하겠습니까?
아, 그리고 btw, 나는 다른 호텔 리스팅 웹 사이트를 만들지 않고있다. 단지 충분히 가까운 예가되었습니다.
class HotelsController < ApplicationController
def index
@hotels = Area.find_by_domain_name(request.subdomains.first).hotels
end
end
당신은 심지어 당신이 좋아하면 람다를 사용하여 named_scope로를 리팩토링 수 : 각 영역을 가정