【发布时间】:2017-10-27 02:12:16
【问题描述】:
我有两张桌子,foos 和 bar。 bar 属于 foos,而 foos 有多个 bar(通过 ActiveRecord)。我想找到一个 foo,它的 bar 正好(并且只有)给定的 bar 名称列表。
例如(请原谅任何伪代码)
bars_list = ["A", "B"]
foo = find_foo(bars_list)
foo.bars.map(&:name) = ["A", "B"]
Find foo 不一定是严格意义上的函数。它可以是返回匹配 foo id 的 SQL 查询,也可以是非常高效的 ActiveRecord 函数。谢谢!
【问题讨论】:
-
我使用了一个带有 INNER JOIN 的 SQL 查询,使用 WHERE EXISTS ...bar.name = ?... AND EXISTS ... bar.name = ? ...但是对于 bar.name="A" 和 bar.name="B" 都存在的 foos ,这没有得到任何匹配。有趣的是,如果我使用 EXISTS ... OR EXISTS ...,则返回所有正确的 foo,但我需要它们都存在。
标签: postgresql activerecord ruby-on-rails-5