2012-01-23 6 views
1

나는 Products의 목록을 가진 레일 앱을 가지고 있으며, 따라서 액션을 내 ProductsController에 올려 놓았습니다.이 앱을 통해 모든 목록을 볼 수 있습니다.모든 레코드의 대체보기를 요청하는 Rails 방법은 무엇입니까?

더 많은 정보와 다른 형식으로 제품을 보여주는 또 다른 시각을 갖고 싶습니다. 어떻게해야할까요?

는 내 주요 옵션은 숫자 :

  1. 필요에 따라 다른 뷰를 렌더링 ProductsController#index에서 if else 블록이 다음 파라미터 (products/index.html?other_view=true)를 통과. 조금 지저분 해.

  2. 는 파라미터 (products/index.html?other_view=true)를 통과 한 후 필요에 따라 다른 HTML 렌더링 내보기 (index.html.haml)에 if else 블록을 갖는다. (나는 이것이 올바른 선택이 아니라는 것을 이미 알고있다.)

  3. 자신의보기 (detailed_index.html.haml)가있는 내 컨트롤러 (예 : ProductsController#detailed_index)에 새 작업을 구현하십시오. 더 이상 RESTful하지 않습니까?

내가 선호하지 않는 옵션이 있습니까?

감사합니다.

답변

2

또 다른 방법은 사용자 지정 형식을 사용하는 것입니다. 이것은 일반적으로 모바일 특정 버전의 페이지를 제공하기 위해 수행되지만 동일한 아이디어를 여기에 적용 할 수없는 이유는 알 수 없습니다.

등록 : 추가 정보가 포함 된 index.detailed.haml (또는 .erb)의 별칭으로 등록됩니다. 상세보기를 위해 추가 데이터를로드해야하는 경우 respond_to 블록에서 수행 할 수 있습니다.

/somecollection/index.detailed 방문자는 자세한보기를 볼 수 있습니다. some_collection_path(:format=>'detailed')

이 것이 'bettrr'인지 아닌지 확실하지 않지만 상세한보기가 데이터의 대체 표현이라고 생각하는 특정 논리가 있습니다. 어떤 형식을위한 것입니다.

+0

좋은 생각 - 나는 그렇게 생각하지 않았습니다. 자세한보기가 필요한 여러 모델이있는 경우 이는 많은 의미가 있습니다. 그러나이 앱에서는 제품에만 필요합니다. 하지만 네 생각이 마음에 들어! –

0

독서를 한 후에는 새로운 RESTful 액션 (내 질문에 옵션 # 3)을 추가하는 것이 좋습니다. 자세한 내용은 여기 : 물론이 detailed.html.haml을 추가로 다음

def detailed 
    # full_details is a scope that eager-loads all the associations 
    respond_with Product.full_details 
end 

그리고 : http://guides.rubyonrails.org/routing.html#adding-more-restful-actions

내가 이렇게 내 routes.rb를 업데이트했습니다

resources :products do 
    get 'detailed', :on => :collection 
end 

그리고 내 ProductsController에 해당하는 조치를 추가 내가 원하는 세부적인 방식으로 제품을 보여주는보기. URL /products/detailed을 생성하는 detailed_products_path으로 연결할 수 있습니다.

이것을 구현 한 후에 이것이 올바른 방법이라고 확신합니다.RoR 가이드가 말했듯이, 많은 사용자 지정 작업을 수행했다면 아마 다른 컨트롤러가 있어야한다는 것을 의미하지만 구현하기 쉬운 추가 작업은 DRY이며 잘 작동합니다. 그것은 Rails Way와 같은 느낌입니다. :-)

관련 문제