2016-04-24 82 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") 
    }