您好我试图在控制器中调用特定产品:
products_controller.rb:
def index
@products = Product.where(:active => true)
end
使用product_decorator.rb:
更新索引方法def purchase(from_date, to_date)
LineItem.select('product_id, SUM(quantity) AS quantity_sold')
.where({orders: {state: 'complete', completed_at: from_date..to_date}})
.group(:product_id).inject({}) {|h, l| h[l.product_id] = l.quantity_sold; h}
end
(这会返回每种产品的购买数量)
这样新的products_controller.rb索引将显示为:
def index
@products = Product.where(:active => true).where.purchase(Date.today-365,Date.today).count > 1
end
仅显示已购买的'产品。 ' .where.purchase(日期...'是我完全迷失的地方,因为我不知道如何使用辅助方法在控制器中进行查询。
非常感谢任何帮助!谢谢!
答案 0 :(得分:0)
您需要将purchase
方法定义为类方法或范围,即以下之一:
<强> product.rb 强>
def self.purchase(from_date, to_date)
LineItem.select('product_id, SUM(quantity) AS quantity_sold')
.where({orders: {state: 'complete', completed_at: from_date..to_date}})
.group(:product_id).inject({}) {|h, l| h[l.product_id] = l.quantity_sold; h}
end
或者:
scope :purchase, (from_date, to_date) -> {
LineItem.select('product_id, SUM(quantity) AS quantity_sold')
.where({orders: {state: 'complete', completed_at: from_date..to_date}})
.group(:product_id).inject({}) {|h, l| h[l.product_id] = l.quantity_sold; h}
}
然后你就可以使用以下方法在一组记录上调用它:
@products = Product.where(:active => true).purchase(Date.today-365,Date.today).count > 1
这涵盖了您在问题中遇到的问题。这有帮助吗?
我没有看过方法中的实际代码(并考虑将命名调整为更清晰的东西),但这应该会让你朝着正确的方向前进。
如果您遇到后续问题,请弹出一个新问题并随时给我一个喊叫声:)