2011-05-11 4 views
3

ActiveRecord를 사용하여 일부 SQL 기능을 복제하려고합니다. 내 문제는 루비 조인 메서드 (SQL 조인과 혼동하지 말 것)를 사용하는 것과 관련이 있습니다. 그 결과 SQL 쿼리는이 결과를 가지고 그러나정수 목록을 만들기 위해 활성 레코드 쿼리베이스를 사용하는 IN 절

scope :stats_tips_given, lambda { |date| 
    where("created_at >= ? AND tipper_id IN(?)",date, User.stats_users(date).collect(&:id).join(', ')) 
    } 

:이 번호 목록 주위에 따옴표를 가지고 있지 않은 경우 SELECT "tip_events".* FROM "tip_events" WHERE (created_at >= '2011-04-14' AND tipper_id IN('4, 5, 11, 17, 22, 48, 54, 65, 88, 103, 147, 151, 181, 182, 189, 195, 190, 196, 202, 226, 227, 231, 243, 245, 232, 225, 212, 217, 220, 263, 265, 273, 281, 282, 284, 286, 293, 271, 299, 300, 309, 310, 312, 318, 321, 308, 303, 297, 333, 346, 362, 368, 377, 386, 389, 392, 353, 398, 427, 420, 434, 418, 454, 456, 477, 484, 480, 453, 450, 452, 458, 497, 498, 503, 510, 511, 515, 522, 529, 537, 540, 508, 499, 524, 521, 502, 542, 546, 548, 557, 559, 571, 575, 576, 581, 587, 562, 580, 544, 567, 565, 573, 577, 597, 606, 619, 620, 640, 636, 607, 603, 600, 596, 656, 657, 668, 676, 683, 685, 662, 677, 669, 689, 678, 690, 694, 514, 206, 304, 601, 63, 495, 150, 344, 691, 490, 545, 634, 222, 288, 534, 630, 569, 323, 697, 489, 394, 568, 661, 672, 130, 381, 590, 205, 527, 474, 184, 622'))

이 쿼리 괜찮을 것 여기 내 코드입니다. 어떻게 수정합니까?

답변

7

join을 사용하여 문자열을 구성하고 있습니다. 그냥 대신에게 실제 배열을 전달 :

User.stats_users(date).collect(&:id) 

대신 :

User.stats_users(date).collect(&:id).join(', ')