ActiveRecord查询关联的实体

时间:2014-04-07 23:06:33

标签: ruby database activerecord orm

我很难找到答案。我认为这归结为我不知道究竟要搜索什么。

假设我有两个表,CustomersOrders,其中客户可能有很多订单。为了获得所有客户订单,我可以运行Customer.find(1).orders。但是,如果我想将返回的数组过滤到某个日期范围之间的那些订单呢?使用ActiveRecord最有效的方法是什么?我也可以使用数组上的select方法对其进行过滤,但如果客户有超过10000个订单,该怎么办呢。这可能是非常低效的。

我读过,也许命名范围可以帮助我解决这个问题。这是一种明智的做法

对ActiveRecord的任何智慧或经验都将非常感激。感谢

1 个答案:

答案 0 :(得分:0)

您可以在AREL中编写此内容,并根据您的数据库服务器查询可能会有所不同,但这里的日期范围非常简单:

class Orders < ActiveRecord::Base
  scope :some_date_range, -> { where("#{table_name}.date_from BETWEEN :date_from AND :date_to", date_from: Date.today, date_to: Date.today + 1.day) }
end

Customer.find(1).orders.some_date_range