我很难找到答案。我认为这归结为我不知道究竟要搜索什么。
假设我有两个表,Customers
和Orders
,其中客户可能有很多订单。为了获得所有客户订单,我可以运行Customer.find(1).orders
。但是,如果我想将返回的数组过滤到某个日期范围之间的那些订单呢?使用ActiveRecord最有效的方法是什么?我也可以使用数组上的select
方法对其进行过滤,但如果客户有超过10000个订单,该怎么办呢。这可能是非常低效的。
我读过,也许命名范围可以帮助我解决这个问题。这是一种明智的做法
对ActiveRecord的任何智慧或经验都将非常感激。感谢
答案 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