2016-11-04 4 views
0

필자는 두개의 비슷한 테이블을 message와 message_histories로 명명했다. 주기적으로 메시지 테이블에서 이전 데이터를 제거하고 message_histories에 삭제합니다.여러 ActiveRecord 쿼리를 레일에 병합하고 레코드를 페이지 매기기하는 방법은 무엇입니까?

이제 message 및 message_history 테이블에있는 app_id로 그룹화 된 메시지 수에 대한 보고서를 생성하려고합니다.

조회 할 수있는 방법 [메시지 & MessageHistory] 모델과 기록에 쪽수를 매기다가있다.

현재 나는 다음 단계는, 그것은 이상한 보인다 사용하지만이 작업을 수행 할 수있는 더 좋은 방법 제안 : 당신이 원하는 것은 UNION 두 테이블에있는 것처럼 그것은 소리

@messages = Message.select("SUM(devices_count) as count ,CAST(run_at AS DATE) AS date").where(:app_id => @app.id).where("last_run_date is not ?", nil).group("CAST(run_at AS DATE)").order("date desc") 
@messages << MessageHistory.select("SUM(devices_count) as count ,CAST(run_at AS DATE) AS date").where(:app_id => @app.id).where("last_run_date is not ?", nil).group("CAST(run_at AS DATE)").order("date desc") 
@messages = @messages.flatten.paginate(:page => params[:page] || 1, :per_page => 100) 
+0

이 레일 방식을 사용하는 깔끔한 방법을 알지 못하지만 'ActiveRecord :: Base.connection.execute()'로 가서 두 테이블 모두에 대해 쿼리를 실행할 수 있습니다. –

+0

메시지에 대해'polymorphic association'과 같은 작업을 수행 할 수 있습니다 역사는 메시지의 한 형태입니다. 메시지 히스토리를위한 두 번째 테이블 필요 없음 –

답변

0

, 다음 결과 페이지를 매기는합니다.

일부 예제에서는 ActiveRecord Query Union을 참조하고 active_record_union 보석 (ActiveRecord을 사용하면 UNION을보다 쉽게 ​​수행 할 수 있음)을 살펴보십시오.

Where 절 필터와 합계/그룹을 올바르게 적용하는 방법을 알아 보려면 몇 가지 실험을해야합니다!

관련 문제