쿼리에서 관련 모델의 평균을 사용 :액티브 : 나는 조금 다음과 같이 몇 가지 레일 모델을 가지고
class Manufacturer
has_many :widgets
end
class Widget
belongs_to :manufacturer
has_many :listings
def weighted_average
listings.sum('value * stock')/listings.sum('stock')
end
end
class Listing
# Represents that a merchant is selling some widgets
belongs_to :widget
belongs_to :merchant
# Model has a :price, eg. $5.99
# Also has a :stock, eg. 45 units
end
지금 Listing#value
가의 weighted_average
이하이고 모든 Listing
객체를 찾으려면 Widget
에 속합니다.
예를 들어, 특정 위젯의 평균 가격이 $ 5이고 $ 4, $ 4.50 및 $ 6의 목록이있는 경우 처음 두 개를 반환하고 싶습니다. 평균 가격보다 낮 으면 좋은 거래.
쿼리는 모든 위젯에 대해 값이 싼 모든 목록을 생성해야하며 단일 쿼리에서이 작업을 수행 할 수 있어야합니다.
어떻게 ActiveRecord 쿼리를 사용하여이 작업을 수행 할 수 있습니까? 이상적인 의사, 그것은 것 같은 뭔가 :
Listing.where('listing.price < widget.weighted_average')
# Not possible, because weighted_average isn't a column in the DB, but a method.
시도해 보셨습니까?'Listing.where ('price ', widget.weighted_average)'? – Alireza
'widget.sum ('value * stock')/widgets.sum ('stock')'또는보다 정확하게'weighted_average'메소드의'위젯 '은 무엇입니까? – Surya
하나의 위젯 목록뿐만 아니라 여러 위젯에 대해이 기능을 사용하고 싶습니다. 위의 제안은 위젯의 평균이 아닌'where' 절에 대해 동일한 값을 사용합니다. 나는 또한'widgets.sum'이 아닌'listings.sum'을 가지고 있다는 것을 깨달았다. - 나는 나의 질문을 편집했다. –