2012-03-01 6 views
2

: 그래도 쿼리를 구축하고 함께 사용하는 방법의 예를 찾을 수 없습니다나는 다음과 같은 라인을 따라 뭔가 할 노력하고있어

if start_date? 
    query = where("datetime > :start_date", :start_date => start_date) 
end 

if end_date? 
    query = where("datetime <= :end_date", :end_date => end_date) 
end 

if client 
    query = where("client.name LIKE :client", :client => client) 
end 

if staff 
    query = where("staff.name LIKE :staff", :staff => staff) 
end 

paginate :per_page => 20, :page => page, 
      :conditions => query, 
      :order => 'datetime' 

을 페이지 매김 플러그인. 물론 다른 테이블의 다른 속성에 대해 쿼리 할 수 ​​있도록 조인을 수행하는 방법을 알아야하므로 쿼리가 정확하지 않습니다. 그러나 그 외에도 조건에서 사용할 쿼리를 작성하는 방법은 무엇입니까? ?

답변

0

어디에요()가 액티브 :: 관계를

.paginate를 반환() S : 그것은 어디에요의 인수 인 것처럼 파라미터를 갖는 상태 조건의 배열 될().

당신은 다음 코드를 수정해야합니다 :

if start_date? 
    query = ["datetime > :start_date", :start_date => start_date] 
end 

+0

어떻게 이렇게 쿼리를 작성할 수 있습니까? 이 둘을 연결할 수 있습니까? – Kezzer

+0

query = [ "datetime> : start_date", : start_date => start_date]; page => page, : conditions => query, : order => 'datetime' –

3

을 당신은 어디에 전화 같은이 (모두 한 줄, 분할의 체인의 끝에있는 .paginate 통화를 보류 할

: 조건부 조건을 추가 할 경우) 가독성까지

SomeClass.where("datetime > :start_date", :start_date=>start_date). 
    where("datetime < :end_date", :end_date=>end_date). 
    paginate(:per_page=>20,:page=>page) 

, 당신처럼, 너무 그렇게 할 수 있습니다

x = SomeClass 
x = x.where("datetime > :start_date", :start_date=>start_date) if start_date 
x = x.where("datetime < :end_date", :end_date=>end_date) if end_date 
x.paginate(:per_page=>20,:page=>page) 
+0

이렇게하는 방법입니다. 추가 할 것은 x = SomeClass.scoped입니다. 당신의 모델 안에'x = scoped' 만 있습니다. – dombesz

+0

범위가있는 기사를 보았습니다. 내 경우에는 적용 할 수 있는지 확실하지 않았습니다. – Kezzer

+0

오늘 저녁에 집에 올 때 세 번 확인해 보겠습니다. 내 프로젝트에 내 프로젝트가 있으므로이 문구를 올바르게 표시해 드리겠습니다. 그래서 – Kezzer