2009-07-17 2 views
1

나는 최근 오이 & Subdomain-fu를 함께 사용하기 시작했기 때문에 나는 끔찍한 일을하게했다. 내 의견으로는, 좋은 쉽게오이 & 하위 도메인 Fu가 함께 놀기 위해서

path = grok_path(path) 
get path 

:

나는 같이하는 데 사용되는 단계 정의가 있습니다. 그러나 지금은이입니다 :

path = grok_path(path) 
get "http://#{subdomain}.example.com#{path}" 

을 작동하지만, 정확히 깨끗한 아니다. 이 작업을 수행하는 더 좋은 방법은 무엇입니까?

답변

2

그냥 다음과 같이 당신이 작은 방법으로 그 물건을 포장 수, 단계 정의를 더 읽기 쉽게하기 :

path = grok_path(path) 
get subdomained_path(path, subdomain) 
: 당신이 뭔가로 단계 정의를 정돈 할 수 있습니다

def subdomained_path(path, subdomain): 
    return "http://#{subdomain}.example.com#{path}" 
end 

기능적으로는 두 가지 코드가 동일하며 해시 코드와 비슷하지만 적어도 필자가 제안한 변경 사항은 코드를 좀 더 깨끗하게 보일 것입니다. Net :: HTTP.get을 수정할 수있는 액세스 권한이있는 경우 실제 "get"메소드를 수정하여 하위 도메인 인수를 허용하여 더 깨끗하게 만듭니다.

+0

이 많이 좋아 보이는, 감사합니다! 나는 그것에 만족하지 않고 있지만, 지금까지 본 것이 최선입니다. –

2

내가이 (여기 진작을 사용) 오이에 어떻게 적용되는지 잘 모르겠지만, 다른 몇 가지 권장 사항을 시도한 후,이 안정적으로 작동 할 나타납니다

def in_subdomain(str) 
    # test.host == default testing domain, feel free to change to match your usage 
    @request.host = "#{str}.test.host" 
end 

그리고 다음을 이전 get 전화로 당신을 단지 당신이 in_subdomain('subdomain-fuuuuuu')인지 확인해야합니다. URL과 current_subdomain을 적절히 설정하면 하위 도메인의 하위 도메인 체류를 지정하지 않고 리디렉션되고 다른 하위 도메인 (또는 :subdomain => false)으로의 리디렉션은 여전히 ​​올바른 redirected_to 값을 설정합니다. 모든 것 모두를 확인하지 않았습니다.

이 (고품질, 당신이 말할 수있는 확신) 예를 들어, 패스 테스트, 그들은 컨트롤러에 current_subdomain에 수표를 가지고 :

should "show on the owner's subdomain" do 
    in_subdomain(@user.domain) 
    get :show, :id => @user.things.first.id 
    assert_response :success 
end 
should "not show on another users' subdomain" do 
    in_subdomain(@random_user.domain) 
    get :show, :id => @user.things.first.id 
    assert_redirected_to user_url(@random_user, :subdomain => @random_user.domain) 
end 
should "not show on a non-existent subdomain" do 
    in_subdomain("cthulhu-fhtagn") 
    get :show, :id => @user.things.first.id 
    assert_redirected_to root_url(:subdomain => false) 
end