2011-12-13 7 views
0

기본적으로 레일스 컨트롤러는 인덱스 동작에서 관련된 모든 객체를로드합니다. 내가 뭘하고 싶은지 특정 개체를 표시하는 것입니다.레일 컨트롤러 - 특정 레코드 만 표시하기위한 인덱스 동작 얻기

예를

위해 나는 자동차라는 모델 (ID, 제조사, 모델, 년)이있다. 필자는 매개 변수에 따라 인덱스에 특정 작성자 만 나열하고 싶습니다.

이 작업을 수행하는 데는 몇 가지 방법이 있지만 어느 것이 가장 적합한 지 잘 모릅니다.

나는 수 :

링크에 매개 변수를 전달 :

cars_path(make: 'Acura') 

날 줄 것이다/자동차/= 아큐라

설정 경로를 확인하십시오 (이 혼란스러워 보인다)

match "cars/:make" => "cars#index", constraints: {make: /[A-z]{1,20}/} 

또는 나는이

0에 대해 별도의 컨트롤러 액션을 만들 수

이 작업을 수행하는 가장 "레일스"방식은 무엇입니까? RoR 3.1

답변

2

단지 한 대의 자동차를 표시하려는 경우 가장 좋은 URL은 /makes/1-Acura/cars입니다. 그래서 당신은 자동차 컨트롤러에서이 자동차의 차를 얻습니다.

메이크용 테이블이 있습니까? 아니면 자동차 테이블에있는 문자열입니까? 나는 네가 하나 있어야한다고 생각해.[: make_id] 노선으로

resources :makes do 
    resources :cars 
end 

, 당신은 PARAMS의가 있는지 테스트 할 것입니다 차량 컨트롤러의 index 액션, 그리고이 사건이 있다면 당신은 같은 차를 얻을 것입니다 :

을 그런
@cars = Make.find(params[:make_id]).cars 

아니면 그

resources :makes do 
    scope :module => "make_scope" do 
     resources :cars 
    end 
end 

이 방법처럼 경로를 설정할 수 있습니다, 당신은 할 수 있습니다 컨트롤러 설정 :

경로 make_cars_path(@make)는 make_scope/cars_controller에서 색인 작업을 수행하므로 params [: make_id]가 있는지 걱정할 필요가 없습니다. 하다.

그렇지 않으면 get params가 정상입니다. 나는 필터의 복잡성에 따라 더 예쁜 URL을 얻기위한 새로운 경로를 정의하는 것이 좋지 않다고 생각합니다.

3

일반적으로 우리가 데이터 필터링에 관해 이야기 할 때, 저는 평범한 구식 GET 바스 (추가 라우트 정의 없음)를 통해 동일한 색인 조치 및 필터링 매개 변수를 유지하는 것을 선호합니다. .

이 그들 가운데 장점이 있습니다 :

  • URL을 북마크-수
  • 내가 필터링 PARAMS을 다시 링크를 페이지 매김하기를 전달하고을 가지고 같은 수 땜질있는 세션 없다 필터가 검색 중일 때 사용자를 따라 가십시오.

필터의 복잡성이 너무 높아질 수 있으므로 추가 경로를 만들지 않는 것이 좋습니다. 필터 매개 변수가 적고 수행중인 작업을 확신하는 경우 추가 멋진 경로를 정의 할 수 있습니다. url/param/param하지만 이러한 경우는 거의 없습니다.

관련 문제