我有一些看起来像这样的Rails模型:
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
低于其所属Listing#value
的{{1}}的所有weighted_average
个对象。
例如,如果某个特定小部件的平均价格为5美元,并且有4美元,4.50美元和6美元的商品,我希望返回前两个 - 因为它们低于平均价格并代表一个很好的协议。
查询应该为所有小部件生成所有价格低廉的列表的列表,并且我希望能够在单个查询中执行此操作。
如何使用ActiveRecord查询执行此操作?在理想的伪代码中,它类似于:
Widget
答案 0 :(得分:0)
尝试:
Listing.joins(:widget).where("#{Listing.table_name}.price < ?", 15)
编辑:
必须用加权平均函数结果替换数字。根据您使用的数据库,它可以是一个SQL查询,它可以准确返回您想要的内容。例如,需要PostgreSQL HAVING
子句。