我的Rails应用程序中有两个模型,用于跟踪不同商店的产品价格它们在这里,但简化了:
class Product < ActiveRecord::Base
attr_accessor :name
def latest_prices
prices.where('created_at >= ?', 30.days.ago)
end
def average_price
latest_prices.prices.map(&:value).sum / latest_prices.count
end
end
class Price < ActiveRecord::Base
attr_accessor :value, :shop_name, :created_at
belongs_to :product
end
我现在想找到所有低于该产品当前平均值的
Price
对象。这基本上意味着在过去30天内创建的所有Prices
,其价格低于最近Product
的平均价格。这可能吗?我在用Postgres。
编辑:我应该提到-我想从
Price
模型中实现这个方法-也就是说,只需要能够显示所有好的交易价格,而不是一个好的交易产品的所有价格。提前感谢您的帮助!
最佳答案
在activerecord中使用named scopes,您可以使用composition获得所需的内容:
class Product < ActiveRecord::Base
attr_accessor :name
has_many :prices
end
class Price < ActiveRecord::Base
attr_accessor :value, :shop_name, :created_at
belongs_to :product
scope :latest, where('created_at >= ?', 30.days.ago)
scope :less_than, lambda { |value| where("value < ?", value) }
def good_deals
latest.less_than(average('value'))
end
end
关于ruby-on-rails - Rails和Postgres:查找“划算的”项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18241054/