Param 이름과 값(고 즐겁게 놀 수 있는 공간)한 부분으로 레일의 경로를
-
19-08-2019 - |
문제
DocumentsController#common_query 처리할 수 있는 여러 다른 스타일을 요청.
즉모든 문서에서 일괄 4 는 모든 문서 태그"행복"
내가 원하는 하나의 경로들이 예쁘다,그래서:
/documents/common_query?일괄=4
/documents/common_query?tag=행복
을 사용할 수 있습니다.
/documents/batch/4
/documents/태그/행복
그래서 최종 결과는#common_query 이라고 하지만 부품의 url 을 사용하였 param name 고 부분으로 그것의 값입니다.
해결책
단일 경로:
ActionController::Routing::Routes.draw do |map|
map.connect "documents/:type/:id", :controller => "documents_controller",
:action => "common_query"
end
다음 params[:type]
나다 "batch"
나 "tag"
, 고 params[:id]
나 "4"
나 "happy"
.당신이 있는지 확인해야 다른 작업에 대한 DocumentsController
전에 와서 이에 노선을 것입니다 때문에 일치하는 url 을 보 "documents/*/*"
.
그런데 왜 그것을 하나의하십니까?사용할 수있는 두 개의 노선을 다음과 같다:
map.with_options(:controller => "documents_controller",
:action => "common_query") do |c|
c.connect "documents/batch/:page", :type => "batch"
c.connect "documents/tag/:tag", :type => "tag"
end
는 동일한 영향을 미칠 것입니다,하지만 더 구체적,그래서 당신 걱정할 필요가 없을 것에 대한 우선순위의 순서는 노선이 있습니다.
다른 팁
두 번째 옵션과 함께,두 개의 노선이 거의 확실히 더 나은 방법으로 이동하기 때문에,그것은 단지 일치의 종류 Url 을 지원하려는 동안 첫 번째 옵션은 또한"일치하는"Url 을 다음과 같/documents/foo/bar 것이다,가능성이 발생하#common_query 하는 방법에서,최고의 반환 RecordNotFound(404)를 응답합니다.최악의 경우,당신은 준비가 되어있지 않습을 볼 수 없습니 예상 params,당신을 얻을 것이 500 오류가 대신...
물론,시작하는 경우는 변화가 많이,당신의 많은 노선이 있습니다.고 사용해야 하는 경우 그들의 조합에서,예를 들어,/documents/batch/4/태그/행복,당신은 와일드카드를 사용할 필요로 하고,매개 변수의 처리에서 컨트롤러입니다.이 같은 것을 볼 수 있습니다.:
map.connect 'documents/*specs', :controller => "documents_controller", :action => "common_query"
는 다양한 요소의 URL 을 사용할 수 있 컨트롤러로 params[:specs].수도 있습을 켜는 것으로 찾을 수 있습니다.
@items = Item.find(:all, :conditions => Hash[params[:specs]])
는 해시[]기술로 변환합니다 하나의 차원 배열의 옵션으로 키-값은 해쉬는 유용할 수 있는 경우에도 당신이 그것을 먹이 직접 찾을 수 있습니다().