2016-04-24 69 views
3

我想在变异的价格小于其比较的价格写一个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

我不完全理解你所拥有的,而是一个Variant被相对于其他变种,是否正确? 它是这样的话,我假设比较表是这样的:
(variant_id, comparison_id)哪里都是Variant值的标识。

如果是这样,这样的事情应该工作:
左连接到比较表,然后比较价值较低的价格,如果这种比较的计数是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") 
    }