我的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/

10-16 20:03
查看更多