2009-12-18 3 views
0

이것은 현재 작동하고 있지만, 저는 이것이 매우 엉성하다는 것을 확신합니다. 이 논리를 모두 얻는 방법에 대한 정보는 더 많은 레일입니다. 이걸로 will_paginate을 구현하려고하는데, 먼저 올바른 레코드를 선택하는 더 깨끗한 방법이 필요합니다.이 논리를 find 메소드로 이동 하시겠습니까?

#shoe table 
------------------------------------- 
size | brand  | color | sold 
------------------------------------- 
8  somebrand black  false 
10  another  brown  true 
------------------------------------- 


def index 

    @shoes = Shoe.find_all_by_sold(false, :include => :assets) 

    #params[:size] = '8,9,10,11,11.5' || '8,9' || 'all' 
    if params[:size] 
    sizes = params[:size].split(',') 
    @shoes.reject! { |shoe| !sizes.include?(shoe.size.to_s) } unless sizes.include?('all') 
    end 

    # params[:color] = 'brown,black' || 'brown' || 'all' 
    if params[:color] 
    colors = params[:color].split(',') 
    @shoes.reject! { |shoe| !colors.include?(shoe.color.parameterize) } unless colors.include?('all') 
    end 

    # params[:brand] same as the others 
    if params[:brand] 
    brands = params[:brand].split(',') 
    @shoes.reject! { |shoe| !brands.include?(shoe.brand.parameterize) } unless brands.include?('all') 
    end 

end 
+0

봐 그냥'발견 conditions', 즉 땜질 ... –

답변

3

여기 바퀴를 확실히 재발 명하고 있습니다.

1 단계 : 명명 된 범위에서 읽습니다.

2 단계 : searchlogic

2

당신은 같은 by_size, by_colourby_brand 이러한 쿼리에 대한 Shoe 모델에 일부라는 범위를 만들 수 있습니다. 그런 다음 여러 순열로 묶을 수 있습니다.

Railscast은 아이디어를 제공해야합니다.

관련 문제