ruby-on-rails - IN 子句使用事件记录查询库来创建整数列表

标签 ruby-on-rails activerecord

我正在尝试使用 ActiveRecord 复制一些 SQL 功能。我的问题与我使用 ruby​​ 连接方法有关(不要与 SQL 连接混淆)。这是我的代码:

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'))

如果数字列表周围没有单引号,这个查询就没问题。我该如何纠正这个问题?

最佳答案

您正在使用 join 形成一个字符串。只需将实际数组传递给它即可:

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

代替:

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

关于ruby-on-rails - IN 子句使用事件记录查询库来创建整数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5966078/

相关文章:

ruby-on-rails - Rails 和 rspec。未初始化常量错误

ruby-on-rails - 使用 Mongoid 的 MongoDB 对话/私有(private)消息模式

ruby-on-rails - 无效的多字节字符 (UTF-8) 错误,Ruby

php - 使用 PHP 查询生成器处理复杂的 WHERE 子句

ruby-on-rails - 奇怪的问题 has_many 通过更新的 Rails 中的关联

ruby-on-rails - 从数据库中已有的数据创建种子文件

ruby-on-rails - Mongoid,如果设置了值,则作用域?

ruby-on-rails - Http JSON POST 请求返回带有 ruby​​ 的空体响应

sql - 查询所有特定记录,其中其相关资源都具有相同的单个属性值

ruby-on-rails - 分组时不显示 Rails 记录