{ :ident => pa-6ren">
gpt4 book ai didi

sql - ActiveRecord 3 "IS IN"哪里查询

转载 作者:数据小太阳 更新时间:2023-10-29 08:34:21 26 4
gpt4 key购买 nike

执行 IS IN 查询的最佳方法是什么,尤其是涉及连接时?

目前,我有类似以下内容:

Table1.joins(:table2).where( { :table2s => { :ident => params[:idents].split(',') } } )

这有效并完成了工作。生成的 WHERE 子句类似于

WHERE "table2s"."ident" IS IN ('a','b','c')

我觉得这样会更干净:

Table1.joins(:table2).where("table2s.ident IS IN ?", params[:idents]:split(','))

有没有办法避免第一种风格而使用更像第二种风格的东西? (即,where 方法识别数组并使用 IS IN 而不是“=”运算符)

最佳答案

让查询编译器为您做这件事通常是更好的方法,因为它会处理您可能忘记的情况,例如传递一个 nil 值并以错误的 结尾IS IN(NULL) 而不是 IS NULL。不过,您可以清理您的声明:

Table1.joins(:table2).where(:table2s => { :ident => params[:idents].split(',') })

更进一步,您可以将其简化为:

Table1.joins(:table2).where('table2s.ident' => params[:idents].split(','))

您可以通过编写一个封装它的范围而不是按原样使用它来进一步清理它。

关于sql - ActiveRecord 3 "IS IN"哪里查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5809297/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com