Ruby where子句

时间:2018-01-10 23:59:47

标签: ruby-on-rails ruby join dynamic where

我有以下的连接/ where子句:

Trail.joins(:filters).where(filters: { param: "family-friendly", param: "over-18" })

变量family-friendlyover-18将从数组中动态加载:

f = ["family-friendly", "over-18"]

我如何调整上面的where子句来动态添加数组中的元素,假设我不知道会有多少元素?

我尝试在数组上使用.each do |f|方法并替换为param: f,但这似乎覆盖了第一个发现。

有什么想法吗?

修改

看起来我的代码实际上并不起作用。它只返回param的secodn实例('over-18')。我正在寻找所有在数组中都有所有相关过滤器的路径。

2 个答案:

答案 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。

另见:

答案 1 :(得分:0)

这可能不是最佳解决方案,但似乎有效:

{
    "files.autoSave": "afterDelay",
    "terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\cmd.exe"
}
相关问题