gpt4 book ai didi

ruby-on-rails - 查找具有多对多关系的两个精确实例的记录

转载 作者:行者123 更新时间:2023-11-29 12:18:00 24 4
gpt4 key购买 nike

我有一个应用程序,其业务逻辑涉及具有多个变体的产品:

class Task < ApplicationRecord
belongs_to :variant
end

class Variant < ApplicationRecord
belongs_to :product

has_many :variant_option_values
has_many :option_values, through: :variant_option_values
has_many :prices
end

class Product < ApplicationRecord
has_many :product_option_types
has_many :option_types, through: :product_option_types
has_many :variants
end

class OptionValue < ApplicationRecord
belongs_to :option_type
end

class OptionType < ApplicationRecord
has_many :product_option_types
has_many :products, through: :product_option_types
has_many :option_values
end

class ProductOptionType < ApplicationRecord
belongs_to :product
belongs_to :option_type
end

class VariantOptionValue < ApplicationRecord
belongs_to :variant
belongs_to :option_value
end

ERD 看起来像这样: enter image description here

有一个产品 product_1 我怎样才能找到它的变体有 OptionValue 实例 option_value_1, option_value_2option_value_3?请注意,变体必须同时具有所有三个选项值,并且可以具有超过这三个(但不一定)。

最佳答案

option_values = [option_value_1, option_value_2, option_value_3]

Variant.include(product: [option_types: :option_values])
.where("option_values.id IN (?)", option_values.map(&:id))
.group("products.id")
.having("count(*) >= ?", option_values.size)

关于ruby-on-rails - 查找具有多对多关系的两个精确实例的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42349249/

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