2014-10-10 2 views
0

Photos 모델이 있다고 가정합니다. 이 모델의 경우 몇 가지보기가 있습니다. 최근 사진, 인기있는 사진, 좋아하는 사진 등.이 모델의 컨트롤러를 만드는 방법은 무엇입니까? 이 다른 옵션은 다음과 같습니다 index 행동과여러 가지 방법으로 제시해야하는 모델의 컨트롤러를 구성하는 방법은 무엇입니까?

  1. PhotosController. 인덱스 액션에 매개 변수를 보내고이 매개 변수에 따라 컨트롤러는 DB에 쿼리를 작성하고 @photos을 뷰에 반환합니다. 이것은 단점을 가지고 index 액션이 상당히 커질 것입니다.

  2. 위와 동일하지만, 어떤 질의를 할 것인가를 결정하는 논리가 서비스에 추출되어 제어기가 린 (lean) 상태를 유지한다. favorite 등 여러 작업을 recent, popular

  3. PhotosController

  4. 하지만 아주 편안한 아니다. index 액션을

  5. 여러 컨트롤러 - RecentPhotosController, PopularPhotosController 등 난 아직도 정상적인 PhotosController이 있어야하지만이 경우는 show, edit 작업을 hande합니다.

이러한 모범 사례가 확립되어 있으며 이러한 옵션 중 하나를 선택할 때 고려해야 할 사항은 무엇입니까?

답변

2

나는 방법 1.

컨트롤러는 큰 성장 안 갈 것입니다 : 당신이 서비스 개체에 PARAMS에서 그것의 쿼리를 작성해야합니다. 좋은 소리

def index 
    @photos = PhotoQuery.new(params).call 
    #.... 
end 

class PhotoQuery 
    attr_reader :params 
    def initialize(params) 
    @params = params 
    end 

    def call 
    case params[:type] 
    when 'recent' then Photo.recent 
    else Photo.all 
    end 
    end 
end 
+0

확인 : 같은

뭔가. 한 가지 추가 질문 - 어떻게 인덱스 작업에 매개 변수를 전달해야합니까. 다른 목록에 대한 링크가있는 메뉴가 있다고 상상해보십시오. 링크는'photos_path (sort_type : 'recent')'과 같은 것으로 생성 될 것입니다. 따라서 매개 변수는 링크에서 하드 코딩됩니다. 이것이 올바른 방법입니까? –

+2

예 괜찮아 보인다. – apneadiving

관련 문제