Ruby ActiveRecord查询关联的实体
我很难找到这个问题的答案。我想这归根结底是因为我不知道到底要找什么 假设我有两个表,Ruby ActiveRecord查询关联的实体,ruby,database,activerecord,orm,Ruby,Database,Activerecord,Orm,我很难找到这个问题的答案。我想这归根结底是因为我不知道到底要找什么 假设我有两个表,客户和订单,其中一个客户可能有许多订单。要获取所有客户订单,我只需运行Customer.find(1).orders。但是,如果要将返回的数组筛选到特定日期范围内的订单,该怎么办?使用ActiveRecord最有效的方法是什么?我也可以使用阵列上的select方法对其进行过滤,但如果一个客户有10000多个订单怎么办。这可能是非常低效的 我读到,也许命名范围可以帮助我解决这个问题。这是明智的做法吗 任何有关Act
客户
和订单
,其中一个客户可能有许多订单。要获取所有客户订单,我只需运行Customer.find(1).orders
。但是,如果要将返回的数组筛选到特定日期范围内的订单,该怎么办?使用ActiveRecord最有效的方法是什么?我也可以使用阵列上的select
方法对其进行过滤,但如果一个客户有10000多个订单怎么办。这可能是非常低效的
我读到,也许命名范围可以帮助我解决这个问题。这是明智的做法吗
任何有关ActiveRecord的智慧或经验都将不胜感激。谢谢您可以在AREL中编写此查询,根据您的DB服务器,查询可能会有所不同,但这里有一个非常简单的日期范围:
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
classorders{where(“{table_name}.date_from:date_from和:date_to”,date_from:date.today,date_to:date.today+1.day)}
结束
客户。查找(1)。订单。某些日期范围
您是否检查过里面是否有您可以使用的东西?活动记录查询上下文中的“范围”实际上只是预打包的查询方法链。您可以使用范围,但仍然需要了解如何使用基础查询方法来创建范围。您也可以使用相同的方法,而无需将它们打包到范围中。作用域只是一个方便的快捷方式/别名。调用Customer.find(1)时也是如此。订单返回的是ActiveRecord::Relation对象,而不是数组?我担心的是,在过滤之前可能会返回一个非常大的数组。不是这样吗?scope
将始终返回一个ActiveRecord::Relation
。你可以读到它