【发布时间】:2021-05-08 14:39:54
【问题描述】:
使用 Ruby on Rails 5,假设我有两个模型,图像和颜色。每个图像有_many 颜色,每个颜色有_many 图像。
现在我尝试获取包含红色和蓝色的图像:
Image.joins(:colors).where(colors: {name: 'red'}).where(colors: {name: 'blue'})
我知道有些图像包含红色和蓝色,但上面的行总是返回 nil。当我这样做时
Image.joins(:colors).where(colors: {name: 'red'}).first.colors
它包含蓝色。
我的错误在哪里?
【问题讨论】:
-
您没有得到任何结果,因为根据您的关系定义,一张图像可以有多种颜色,因此一种颜色是连接表中的一行,并且您正在过滤与相同列匹配的行但是一次有两个不同的值,这样的任何查询都不会返回任何结果。您可能需要为此调整查询。
标签: ruby-on-rails database nested