2011-04-13 3 views
2

내가 현재 작업하고있는 응용 프로그램의 현재 경로에서 경로 세그먼트 키의 수를 결정해야하며 관련 레일스 3 소스 파일에서 약간 파고 들기는하지만 알아낼 수는 없습니다. 레일스 3 경로에서 세그먼트 키를 얻는 방법은 무엇입니까?

나는 현재 경로에서 경로를 구축 url_forrequest를 사용하는 방법을 알고 있지만, 사실은 url_for가 사용하는 경로에 매핑되는 ActionController::Routing::Route에 도착하는 방법을 모르겠어요. 필요한 경로의 인스턴스를 얻을 수 있다면 Route # segment_keys를 호출하여 필요한 것을 얻을 수 있습니다.

아무도 관심이있는 경우, 내가 이것을하는 이유는 선택 드롭 다운으로 리소스를 전환 할 수 있고 현재 선택된 리소스에 적용되는 현재보기에 머무를 수 있지만 현재 경로가없는 경우에만 입니다. t는 중첩 포함 경로 (즉 /resources/2/subresources/1subresource 때문에 번호 /resources/1/subresources/1 사이하지 전환을 /resources/1/edit/resources/2/edit에 있지만 1 resource 2의 아이가 아닌 토글).

+0

모델 구조는 무엇입니까? http://guides.rubyonrails.org/이 모든 것을 설명합니다. – jvatic

+0

@jvatic 주어진 경로에 대한 경로 세그먼트 수를 얻기 위해 모델은 무엇을해야합니까? 그리고 가이드의 위치는 어디입니까? 기꺼이 거기에서 읽을 것이지만 API 문서에서도 다루지 않습니다 ... – coreyward

+0

http://guides.rubyonrails.org/routing.html을 읽으십시오. jQuery를 사용하여 토글을 매우 쉽게 할 수 있습니다. 자바 스크립트에 대한 회신에 불편 함이 더 나은 해결책 중 하나 일 수 있습니다. 또 다른 옵션은 중첩 된 경로를 사용하고 두 모델 컨트롤러에서 이전 필터에 매개 변수를 전달하는 것입니다. – jvatic

답변

0

은 내가 이런 식으로 뭔가를해야 할 경우가 있었다, 그래서 나는 내 application_helper.rb의 방법을 추가 :

def display_sub_navigation 
    if admin_signed_in? 
    url_path = request.fullpath.split("/") 
    if url_path.size > 3 && File.exists?(Rails.root.join("app/views/shared/_#{url_path[2]}_sub_navigation.html.erb")) 
     render :partial => "/shared/#{url_path[2]}_sub_navigation" 
    end 
    end 
end 

당신이 request.fullpath.split를 사용하여 볼 수 있듯이 ("/") 내가 url_path에 할당 한 배열을 만듭니다. 여기에서 필자는 원하는 것을 추출하거나 배열의 요소 수를 계산할 수 있습니다. 나는 이것이 당신을 올바른 방향으로 밀어 넣기를 바랍니다.

0

모든 세그먼트 키가 필요합니까 아니면 특정 종류가 필요합니까?

내가 나에게 문자 세그먼트 방금 배열있어이 코드

Rails.application.routes.routes.collect do |i| 
    i.path.spec.grep(Journey::Nodes::Literal).collect(&:left) 
end 

으로 바로 문자 키를 얻을 수 있었다 - 당신이 존재하는 세그먼트 키의 수를 계산하는 것을 수정할 수 내기를 (이는 당신에게 당신이 도움이 같은 request.path

0

겠습니까 뭔가에 대해 실행할 수있는 정규식을 줄 것이다 경로 및 to_regexp의 구축에 사용 된 원래의 문자열을 줄 것이다하거나 Journey::Nodes::Catto_s 지원) 기호에 대해 한 번 리터럴 번합니까? 경로 해시 경로를 확인합니다.

> uri = URI("http://localhost:3000/items/2015/3") # some URI for your request, or the URL/Path in question 
> Rails.application.routes.recognize_path(uri.path) 
=> {:controller=>"items", :action=>"index", :year=>"2015", :month=>"03"} 
관련 문제