2011-05-11 35 views
3

我想使用ActiveRecord複製一些SQL功能。我的問題涉及到我使用的ruby連接方法(不要與SQL連接混淆)。這裏是我的代碼:IN子句使用活動記錄查詢庫來創建整數列表

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

然而得到的SQL查詢有這樣的結果: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(', ')