【发布时间】:2016-04-15 22:37:23
【问题描述】:
我正在构建一个命令行应用程序,该应用程序需要连接各种 postgresql 数据库并在这些数据库中执行不同的查询作为准备好的语句。在特定的查询中,我需要将IN 子句与ActiveRecord 的connection_raw 方法结合使用。我的代码是这样的:
ActiveRecord::Base.connection_raw.prepare('read_publications', "UPDATE publications SET readed = TRUE WHERE id IN ($1);")
之后,我尝试执行这个查询:
ActiveRecord::Base.connection_raw.exec_prepared('read_publications', [1,2,3,4])
问题是这不起作用。查询运行时会出现以下错误:
没有将数组隐式转换为整数
我做错了什么?是否存在一种方法可以将这个数组转换为IN 子句可以理解的值?
【问题讨论】:
-
你会在这里找到你的解决方案stackoverflow.com/questions/13805627/…
-
感谢@fanta,但我只介绍了在没有 ActiveRecord 干扰的情况下使用准备好的语句的基础知识。我认为这里的问题是专门处理 SQL 的
IN和一组 Ruby 值。 -
是的@muistooshort!你是对的!我做了更正。是的!问题是您在评论中描述的问题。
-
我试图弄清楚如何使 pg gem(它是与 PostgreSQL 对话的底层 gem)与数组一起玩。总是有像
a.length.times.map { |i| "$#{i + 1}" }.join(',')这样的东西来构建一个占位符列表以匹配您的数组长度,如果我找不到更好的东西,一些字符串争论可以将占位符放入您的 SQL 中。
标签: sql ruby-on-rails ruby postgresql