Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby ActiveRecord查询关联的实体_Ruby_Database_Activerecord_Orm - Fatal编程技术网

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
。你可以读到它