2014-01-27 3 views
3

URL 및 레일 라우팅에서 슬래시 문자와 파운드 기호 (해시 기호) 문자의 차이점은 무엇입니까?레일 경로 - 슬래시 문자 대 해시 문자

이 작업

get "/static_pages/about" 
get 'about', to: 'static_pages#about', as: :about 

이되지

get "/static_pages#about" 
get 'about', to: 'static_pages/about', as: :about 
get 'about', to: '/static_pages#about', as: :about 

어떤 코드 컨트롤이 동작하고, 그 뒤에 더 깊은 이유는 무엇입니까?

답변 :

(두 사람이 아주 잘 대답하고, 나는 사람들을 도울 수있는 다른 방법으로 대답에 대한 이해를 명시하고자하는 허용 대답으로 표시 할 수있는 하나의 문제의 선택을했다. .)

/기호를 사용하면 문자열이 기본 URL에 추가 된 URL 문자열로 인식됩니다. 따라서 '#'문자는 URL의 일부로 해석되고 URL은 '#'문자를 사용하는 것을 싫어합니다.

/문자를 사용하지 않는 경우 첫 단어는 어떻게 든 컨트롤러 이름으로 인식되며 '#'및 동작 이름을 사용합니다.

답변

1

to: 'static_pages#about'에있는 #static_pages_controller의 동작을 의미합니다. 구문은 controller#action입니다. 당신이 get "/static_pages#about"를 정의 할 때

static_pages#about#은 문자 그대로이고 #aboutabout 조치를 의미하지 않는다 경로 즉의 컨트롤러가됩니다. static_pages#about 컨트롤러가없는 경우 missing :controller 오류가 발생합니다.

다음 경로 정의는 당신에게 제공 /aboutstatic_pages 네임 스페이스 또는 범위가 될 수 중 하나 static_pages/about 컨트롤러의 about 조치에 매핑 경로를.

get 'about', to: 'static_pages/about', as: :about 

다음 경로가 잘못 인해 to 옵션에서 최고의 슬래시 /에 오류가 발생합니다.

get 'about', to: '/static_pages#about', as: :about 
+0

"있는 그대로"라는 단어는 무엇을합니까? – Richard

+0

@ 리차드를 사용하면 경로 이름을 지정할 수 있습니다. 위의 예제에서'as : : about'은'about_path'와'about_url' 헬퍼를 사용하게합니다. – vee

3

루비에서는 해시 기호가 일반적으로 클래스의 인스턴스 메소드 이름 앞에 붙습니다. Array 클래스 문서 페이지의 왼쪽 사이드 바 (http://www.ruby-doc.org/core-2.1.0/Array.html)를 참조하십시오.

get "/static_pages#about"#about이 (가) URL의 일부가 아니기 때문에 작동하지 않습니다.

get 'about', to: 'static_pages/about', as: :about/about은 호출해야하는 컨트롤러 메서드를 나타내지 않으므로 작동하지 않습니다.

get 'about', to: '/static_pages#about', as: :about static_pages 앞에 선행 문자가 있기 때문에 작동하지 않습니다.