2012-10-19 3 views
1

Ruby를 통해 쿼리를 생성하여 보고서를 생성합니다.지저분한 범위로 쿼리를 작성하는 대신?

query = Account.includes(:assets, :location, :category) 

보고서 요청에 여러 개의 선택적 매개 변수가 있습니다 (예 : 카테고리를 보낼 수 있거나 전혀 초기화 할 수 없음).

현재, 나는 범위 내가이 여러 번 수행하고 작동

scope :in_category, lambda { |category| 
    where("#{table_name}.category_id = :category_id", :category_id => category.id) 
    } 

인 적용 범위

if category.present? 
    cat = Category.find_by_name(category) 
    query = query.in_category(cat) if cat.present? 
end 

로 설정하고 쿼리를 할당 한 후 다음을 고려하십시오. 나는 하나의 Where 조건을 가독성을 위해 구축하는 것을 선호한다 (실제 쿼리를 이해하기 위해서는 10 개의 스코프를 읽지 않아도된다).

깨끗한 방법이 있습니까?

답변

0

방법이

Account.includes(:assets, :location, :category).joins(:category).where(Category.arel_table[:name].eq(category)) 
에 대한