我尝试编写ActiveRecord查询来过滤变量价格 其比较价格的所有变体。这是我的变体模型:
class Variant < ApplicationRecord
has_and_belongs_to_many :comparisons,
class_name: "Variant",
foreign_key: "competitor_variant_id",
association_foreign_key: "account_variant_id",
join_table: "comparisons"
belongs_to :parent, polymorphic: true
end
这是我到目前为止所得到的:
joins(:comparisons).where('variants.price < comparisons_variants.min(:price)').distinct
答案 0 :(得分:1)
我不完全明白你拥有什么,但Variant正在与其他变种进行比较,对吗?
就是这样,我假设比较表是这样的:
(variant_id, comparison_id)
其中两者都是Variant
值的ID。
如果是这样,这样的事情应该有效:
左边连接到比较表,然后连接到价格较低的比较值,如果这个比较的计数是0,那么变量必须具有最低价格。
scope :with_lowest_price, ->{
joins("left join comparisons on comparisons.variant_id = variants.id left join variants as compared on comparisons.comparison_id = compared.id and variants.price >= compared.price")
.group("variants.id")
.having("count(compared.id)= 0")
}