如何通过计算关联表进行筛选?

时间:2016-04-24 19:44:41

标签: ruby-on-rails ruby postgresql activerecord

我尝试编写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

1 个答案:

答案 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")
  }