我有以下的连接/ where子句:
Trail.joins(:filters).where(filters: { param: "family-friendly", param: "over-18" })
变量family-friendly
和over-18
将从数组中动态加载:
f = ["family-friendly", "over-18"]
我如何调整上面的where子句来动态添加数组中的元素,假设我不知道会有多少元素?
我尝试在数组上使用.each do |f|
方法并替换为param: f
,但这似乎覆盖了第一个发现。
有什么想法吗?
修改
看起来我的代码实际上并不起作用。它只返回param的secodn实例('over-18')。我正在寻找所有在数组中都有所有相关过滤器的路径。
答案 0 :(得分:1)
要选择包含数组Trails
中指定的所有Filters
的所有f
,您可以在PostgreSQL中使用带GROUP BY
子句的HAVING
:
f = ["family-friendly", "over-18"]
Trail.joins(:filters).group('trails.id').having(
'array_agg(CAST(filters.param AS text)) @> ARRAY[?]', f)
此解决方案的缺点是它仅适用于PostgreSQL。
另见:
array_agg
@>
运营商答案 1 :(得分:0)
这可能不是最佳解决方案,但似乎有效:
{
"files.autoSave": "afterDelay",
"terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\cmd.exe"
}