gpt4 book ai didi

mysql - Rails 快速查找 has_many 关联与关联 ID 数组完全匹配的记录

转载 作者:行者123 更新时间:2023-11-30 22:18:32 25 4
gpt4 key购买 nike

我有一个 Product 模型,其中 has_many OptionValue 记录,它描述了 color尺寸

在我的代码中,我需要查询 Product 模型,其中 product.option_values.pluck(:id) 数组与(例如)options = [1, 6 , 4]

运行类似 Product.includes(:option_values).where(option_values: { id: options_array }) 的操作会返回与选项数组的至少一个元素匹配的所有值,而不是所有值.

我开发了一种获取所需记录的低效方法,如下所示:

Product.all.each { |v| return v if v.option_values.pluck(:id).sort == options_array.sort }

很明显,上面的方法很简单,我确信有更简单的方法来处理这个问题,我很乐意使用 ActiveRecord 或直接的 SQL 查询(尽管我不太喜欢后者,所以还没有'还没有想出任何办法)。

非常感谢任何有关实现此目标的最佳方法的建议。不确定我是否已经完美地解释了这一点,所以如果您有任何问题,请发表评论。

提前致谢,史蒂夫。

最佳答案

在我的旧问题中解决了这个问题,并拼凑了一个快速简单的解决方案,所以把它放在这里以供可能以这种方式出现的任何其他人使用:

product_options = product.option_values.pluck(:id)
unless options_array.length < product_options.length
(product_options & options_array).length == product_options.length
end

这个:

  • 检查 options_array 是否足够长以包含必要的匹配项
  • 在两个数组中寻找共同的元素 ((product_options & options_array))
  • 测量它们的长度
  • 检查这是否与所需数组 product_options 的长度相同,这意味着已找到所有必需的选项。

或者,您可以从另一个中减去一个并检查是否有任何剩余(即丢失):

(product_options - options_array).empty?

希望这在某些时候对某人有所帮助。

关于mysql - Rails 快速查找 has_many 关联与关联 ID 数组完全匹配的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37415089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com