2017-12-08 1 views

답변

1

이 일을 시도 할 수 있습니다 - 당신은 아래와 같이 시도 할 수

newest_log = LogActivity.eager_load(:call_logs, :send_email_logs, :send_sms_logs).last 
# The above will fire a query and fetch all the data you need, the below lines will segregate your data 
newest_call_log  = newest_log.call_logs.last 
newest_sent_email_log = newest_log.send_email_logs.last 
newest_sent_sms_log = newest_log.send_sms_logs.last 
+0

이 3 개의 쿼리를 사용하려면 1 개의 쿼리 T.T를 원합니다. –

+0

@ Toàn 그는 3 개의 쿼리를 사용하지만 모두 효율적입니다. 이 3 개의 리턴 된 값을 비교하여 'ruby' 코드에 의해 가장 새로운 것을 얻을 수 있습니다. 그러나 여전히 3 개의 로그 테이블에서 STI를 사용하지 않으면 효율적으로 실행되지 않습니다. – yeuem1vannam

+0

나는 당신이 원하는 것을 맞추기 위해 답을 업데이트했다. 유스 케이스에 따라 @ yeuem1vannam과 같은 STI가 – bitsapien

0

-

newest_call_log  = LogActivity.call_logs.last 
newest_sent_email_log = LogActivity.send_email_logs.last 
newest_sent_sms_log = LogActivity.send_sms_logs.last 

단일 쿼리 대안이 작업을 수행하는 것입니다 :

LogActivity.joins(:call_logs, :send_email_logs, :send_sms_logs).where(log_activity_id: 1 or something) 

자세한 설명은 , 레일을 볼 수 있습니다 guide link

감사합니다

+0

과 같이 세 가지 객체를 모두 제공 할 것이라고 제안해야합니다. call_logs, send_email_logs, send_sms_logs 또는이 세 가지 항목 중 마지막으로 생성 된 하나의 객체 –