Rails Active Record:通过关联值多次迭代查询

Rails Active Record: Query by association value multiple iterations

我有一个 rails 应用程序,如果它们有特定颜色,我会尝试在其中检索鞋子。 目前我的代码是:

@shoes = Shoe.all
shoe_colors = params[:shoe][:colors].split('/')

shoe_colors.each do |color|
    @shoes = @shoes.joins(:colors).where('colors.name = ?', color)
end

我将所有颜色发送到一个字符串中,然后将其拆分。如果我只尝试匹配一种颜色,效果很好,但是如果我发送多种颜色,它 returns 没有结果。我相信我在第一次迭代时以某种方式排除了所有其他颜色,但我很困惑为什么或如何不能。感谢所有帮助,谢谢。

我假设你对颜色参数没有任何问题,这意味着 shoe_colors = params[:shoe][:colors].split('/') 好的,所以你的查询应该是

shoe_colors = params[:shoe][:colors].split('/')
@shoes = Shoe.joins(:colors)
.where('colors.name IN (?)', shoe_colors)
.group(:id).having(Arel.star.count.eq(shoe_colors.size))

无需遍历 shoe_colors 列表即可获得所有颜色匹配的鞋子。以下是获取所有匹配数据的方法:

shoe_colors = params[:shoe][:colors].split('/')
@shoes = Shoe.all.joins(:colors).where(colors: { name: shoe_colors })