Param 이름과 값(고 즐겁게 놀 수 있는 공간)한 부분으로 레일의 경로를

StackOverflow https://stackoverflow.com/questions/339706

  •  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]])

는 해시[]기술로 변환합니다 하나의 차원 배열의 옵션으로 키-값은 해쉬는 유용할 수 있는 경우에도 당신이 그것을 먹이 직접 찾을 수 있습니다().

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top