结合多个模型实例的范围

时间:2016-07-11 17:20:31

标签: ruby-on-rails-4 activerecord

有没有办法从模型对象的多个实例中“组合”(如果这是正确的词?)范围?例如:

class Order
  scope :made_today, -> { where(date: Date.today) }
  has_many :products
end

如果我尝试:

Order.made_today.products

我得到NoMethodError: undefined method 'products' for #<Order::ActiveRecord_Relation:...>

实现这一目标的最有效方法是什么?希望,作为单个SQL语句,让数据库完成所有的咕噜声。

2 个答案:

答案 0 :(得分:0)

这与&#34;组合范围&#34;无关,您只是无法在记录的集合上调用关联。你也不能使用Order.products

如果您想获取记录集合的所有产品,则需要加入该表。

答案 1 :(得分:0)

您可以使用ActiveRecord Relations以相反的方向执行此操作:

Product.where(order: Order.made_today)

此外,这应该只需要一个SQL查询。

注意:正如@maegar所解释的那样,这不是单个订单。为此,您希望处理订单的实例:

@order = Order.made_today.first
@order.products #=> [<Product>, <Product>]