Rails活动记录:按关联值查询多次迭代



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

@shoes = Shoe.all
shoe_colors = params[:shoe][:colors].split('/')
shoe_colors.each do |color|
@shoes = @shoes.joins(:colors).where('colors.name = ?', color)
end

我在一个字符串中发送所有颜色,然后将其拆分。如果只有一种颜色我试图匹配,效果会很好,但如果我发送多种颜色,则不会返回任何结果。我相信我在第一次迭代中以某种方式排除了所有其他颜色,但我很困惑为什么或怎么不能。我感谢大家的帮助,谢谢。

我假设您对颜色参数没有任何问题,这意味着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 })

相关内容

  • 没有找到相关文章

最新更新