2013-09-04 3 views
0

특정 경로에 대해 정의한 기본값에 액세스하고 싶습니다. 그러나 레일스는 매개 변수 해쉬에 넣지 않습니다. 예 :레일 : 경로 세그먼트 기본값 액세스

routes.rb :

http://localhost:3000/packages 

PARAMS을 해시됩니다 :

{"action"=>"index", "controller"=>"packages"} 

하지만 내가 선호하는 것은이다 내가 전화

get "packages(/:display)", to: "packages#index", defaults: { display: 'grid' } 

URL 얻으세요 :

{"action"=>"index", "controller"=>"packages", "display"=>"grid"} 

문제는 실제로 크지 않습니다. 하지만 Rails는 DRY를 사용하여 routes.rb에 기본값을 유지하고 컨트롤러 나 뷰 코드에서 기본값을 유지할 수 없다고 생각합니다.

제 의도는 결과 표나 결과 목록을 표시하는 것입니다. 그리고 사용자가 특정보기를 지정하지 않으면 그리드 스타일을 사용하고 싶습니다.

(나는 레일 4를 사용하고 있습니다)

+0

'/ packages'가 일치하는 이전 경로가 있습니까? – deefour

+0

오 마이. 너는 그렇게 생각했다. "packages"=> "packages # index"를 얻으십시오. 나는 그것을 주석 처리했으며 이제 기본 매개 변수가 예상대로 전달됩니다. 크리스탈 공을 들여다 줘서 고마워. :) –

+0

나는/packages/list를 호출 할 때 꽤 이상한 효과를 얻지 만. * params *가 * request.params *와 같다고 가정했습니다. 그러나 * params *는 { "display"=> "list", "controller"=> "패키지", "action"=> "index" "controller"=> "packages", "action"=> "index"}. 기묘한. –

답변

0

난 그냥 내 레일 4 응용 프로그램에 다음과 같은 경로를 테스트했습니다.

get "packages(/:display)", to: "packages#index", defaults: { display: "grid" } 
  • /packages : params[:display]"grid"
  • /packages/list
  • 입니다 : params[:display] 그것은 당신이 다른 경로는 여전히으로 재생 내가 위의 배치 같은 결과를 방지해야 가능성이 높습니다 "list"

입니다.

이러한 충돌을 발견하지 못하면 선택형 세그먼트 을 피할 수 있습니다 (결과는 위와 같습니다)?

get "packages",   to: "packages#index", display: "grid" 
get "packages/:display", to: "packages#index" 
+0

고맙습니다. 나를 정말로 생각하게한다. 오히려 여러 경로를 사용하여 좀 더 명확하게해야 할 때 URL 세그먼트에 너무 많은 노력을 기울이고있는 것처럼 보입니다. 나는 이것을 시도 할 것이다. 그러나 나는 아직도 * params *와 * request.params *가 다른 결과를주는 이유에 대해 혼란스러워합니다. –