【发布时间】:2015-10-01 17:56:18
【问题描述】:
Activerecord 为基本类型生成参数化查询,但它确实对数组类型进行了参数化。
例如
Article.where(id: 1)
# generates
# SELECT "articles".* FROM "articles" WHERE "articles"."id" = $1 [["id", 1]]
但是,
Article.where(id: [1,2])
# generates
# SELECT "articles".* FROM "articles" WHERE "articles"."id" IN (1, 2)
# rather than
# SELECT "articles".* FROM "articles" WHERE "articles"."id" IN ($1, $2)
[["id", 1], ["id", 2],]
是否可以重构查询或使用 Arel 为 IN 子句生成参数化查询?
【问题讨论】:
-
什么轨道版本?因为它在 4.1 的两种情况下都生成非参数版本? gist.github.com/gaurish/be9d29d09162e2213611
-
我尝试了最新的 Rails 版本。您不会看到带有 to_sql 的参数查询,因为它将绑定参数替换为值。尝试在 Rails 控制台中使用
ActiveRecord::Base.logger = Logger.new(STDOUT)启用 activerecord 日志记录。
标签: sql ruby-on-rails activerecord arel parameterized