Ruby on Rails 2.1-경로 시스템
Rails는 URL을 구문 분석하여 요청에 대한 컨트롤러, 작업 및 매개 변수를 결정합니다. Rails 라우팅을 사용하면 URL의 일부가 추가 매개 변수를 지정할 수 있으며 전체 라우팅 프로세스를 제어 할 수 있습니다. 라우팅 규칙은 모든 웹 서버에서 동일하게 작동합니다.
config / routes.rb 파일은 Rails 라우팅 시스템의 핵심입니다. 이 파일에는 요청의 URL 경로를 일치시키고 해당 요청을 전달할 위치를 결정하는 규칙이 포함되어 있습니다. 규칙은 파일에 정의 된 순서대로 테스트됩니다. 요청의 URL 경로와 일치하는 첫 번째 규칙은 해당 요청의 운명을 결정합니다.
라우팅 시스템은 실제로 두 가지 작업을 수행합니다.
요청을 컨트롤러 내부의 작업 메서드에 매핑합니다.
link_to, redirect_to 및 form_tag와 같은 메소드에 대한 인수로 사용할 URL을 작성합니다.
따라서 라우팅 시스템은 방문자의 요청 URL을 컨트롤러 / 액션 시퀀스로 전환하는 방법을 알고 있습니다. 또한 사양에 따라 URL 문자열을 제조하는 방법도 알고 있습니다.
애플리케이션을 생성 할 때 Rails가 설치 한 다음 경로를 고려하십시오.
map.connect ':controller/:action/:id'
이 경로는 요청이 :controller 다음에 :action 차례로 일부 먹이 :id.
"http : // localhost : 3000 / book / edit / 2"에 대한 수신 요청을 받으면 다음과 같이 매핑됩니다.
params = { :controller => 'book',
:action => 'edit',
:id => '2'
}
따라서 기본 라우팅 (라우팅 규칙을 수정하지 않은 경우)은 다음과 같습니다.
http://<base-url>/<controller>/<action>/<id>
http://www.example.com/book/update/20과 같은 URL은 update 메서드 (액션) BooksController 클래스 (컨트롤러) id 매개 변수를 값 20으로 설정합니다.
다음 코드 블록은 다른 항목이 지정되지 않은 경우 책 을 기본 컨트롤러로 설정 합니다. '/'를 방문하면book 제어 장치.
ActionController::Routing:Routes.draw do |map|
map.connect ':controller/:action/:id',:controller => 'book'
end
주어진 URL에 작업이 지정되지 않은 경우에도 기본 작업을 정의 할 수 있습니다.
ActionController::Routing:Routes.draw do |map|
map.connect ':controller/:action/:id',
:action => 'edit',:controller => 'book'
end
이제 책 컨트롤러 내의 모든 편집 방법을 다음과 같이 ID가 20 인 책을 편집 할 수 있습니다.
http://localhost:3000/2
경로 우선 순위
경로는 route.rb 파일에서 경로가 나타나는 순서로 정의 된 우선 순위를 갖습니다. 우선 순위는 위에서 아래로 이동합니다.
해당 파일의 마지막 경로는 가장 낮은 우선 순위에 있으며 마지막에 적용됩니다. 일치하는 경로가 없으면 404가 반환됩니다.
기본 경로 수정
요구 사항에 따라 기본 경로를 변경할 수 있습니다. 다음 예제에서 우리는 다음과 같이 컨트롤러 와 액션 을 교환 할 것입니다.
# Install the default route as the lowest priority.
map.connect ':action/:controller/:id'
이제 주어진 컨트롤러 에서 액션 을 호출 하려면 다음과 같이 URL을 작성해야합니다.
http://localhost:3000/action/controller/id
그러한 순서로 행동 과 통제 를 두는 것은 특별히 논리적이지 않습니다 . 원래 기본 (기본 기본) 경로가 더 좋고 권장됩니다.
Ante-Default Route
'사전 기본'경로는 다음과 같습니다.
map.connect ':controller/:action/:id.:format'
끝에있는. : format은 리터럴 도트 및 id 필드 뒤의 와일드 카드 "형식"값과 일치합니다. 즉, 예를 들어 다음과 같은 URL과 일치합니다.
http://localhost:3000/book/show/3.xml
여기, 컨트롤러 액션 내부에서 params[:format] xml로 설정됩니다.
빈 길
빈 경로는 기본 경로의 반대입니다. 새로 생성 된 routes.rb 파일에서 빈 경로는 주석 처리됩니다. 그 이유는 보편적이거나 합리적인 기본값이 없기 때문입니다. 작성하는 각 응용 프로그램에 대해이 아무것도하지 않는 URL 이 무엇을해야하는지 결정해야합니다 .
다음은 매우 일반적인 빈 경로 규칙의 몇 가지 예입니다.
map.connect '', :controller => "main", :action => "welcome"
map.connect '', :controller => "main"
다음은 위의 규칙에 대한 설명입니다.
첫 번째는 http : // localhost : 3000 만 입력해도 주 컨트롤러 내부에서 시작 작업을 검색합니다 .
마지막 항목은 http : // localhost : 3000 / main / index에 연결됩니다. 여기서 index 는 지정되지 않은 경우 기본 작업입니다.
Rails 2.0은 다음과 같이 Rails 애플리케이션의 빈 경로를 정의하는 적절한 방법이되는 root라는 매퍼 메소드를 도입했습니다.
map.root :controller => "homepage"
빈 경로를 정의하면 사람들이 도메인 이름 만 사용하여 사이트에 연결할 때 볼 수있는 정보를 얻을 수 있습니다.
명명 된 경로
응용 프로그램을 계속 개발하면 응용 프로그램 전체에서 사용하는 몇 가지 링크가있을 것입니다. 예를 들어, 기본 목록 페이지로 돌아가는 링크를 자주 넣을 것입니다. 응용 프로그램 전체에 다음 줄을 추가하는 대신 해당 링크의 단축 버전에 연결할 수있는 명명 된 경로를 만들 수 있습니다.
link_to 'Home', :controller => 'classified', :action => 'list'
다음과 같이 명명 된 경로를 정의 할 수 있습니다. 여기서 connect 를 사용 하는 대신 정의 할 수있는 고유 한 이름을 사용하고 있습니다. 이 경우 경로를 home 이라고 합니다 . 나머지 경로는 생성 한 다른 경로와 유사합니다.
map.home '', :controller => 'classified', :action => 'list'
이제 다음과 같이 컨트롤러 또는 뷰에서 이것을 사용할 수 있습니다.
<%= link_to 'Back', home_url %>
여기에서 링크 할 : controller 및 : action 을 나열하는 대신 경로 이름 뒤에 _url을 입력합니다. 사용자는 어떤 차이도 느끼지 못합니다. 명명 된 라우팅은 Rails 개발자가 타이핑을 절약하기위한 편의 일뿐입니다. 위의 경우는 다음과 같이 명명 된 경로없이 작성할 수 있습니다.
<%= link_to 'Back', {:action => 'list'} %>
예쁜 URL
경로는 예쁜 URL을 생성 할 수 있습니다. 예를 들면-
map.connect 'articles/:year/:month/:day',
:controller => 'articles',
:action => 'find_by_date',
:year => /\d{4}/,
:month => /\d{1,2}/,
:day => /\d{1,2}/
# Using the route above, the url below maps to:
# params = {:year => '2005', :month => '11', :day => '06'}
# http://localhost:3000/articles/2005/11/06
경로에 대한 자세한 내용을 보려면 ActionController::Routing.