如何解决是否可以指定链接范围查询的顺序
我目前正在执行这样的链接范围查询
lib:
是否可以对查询进行排序,以便在Enrollment.active.occurs_today
之前查询.active
并防止延迟加载?希望与下面类似
.occurs_today
解决方法
并不是总是很欣赏的是,链接范围的顺序并不重要。链接的作用域正在构建包含所有条件的单个查询,然后在该点(例如,通过请求记录或计数)来操作该查询时,将使用组合条件来检索记录。
Rails控制台是一个例外,在该控制台中,每个范围在输入时都会执行。
如果您有伪范围(执行返回id
然后对其进行查询的查询),则可以将其实现为类方法,并安排将其他范围作为参数传递给该类方法以执行他们先。可能的实现方式可能是...
def self.occurs_today(*scopes)
result = scopes.inject(all) {|relation,scope| relation.send(scope)}
where(id: result.select { |s| s.occurs_on?(Date.current) }.map(&:id))
end
您可以这样做
Enrollment.occurs_today(:active)
或多个作用域
Enrollment.occurs_today(:active,:priority)
在两种情况下,select
都将在已经确定范围的关系上执行。
或者,我认为只要更改现有的occurs_today
范围,您就可以看到性能的提高(以及对范围顺序的自动识别)。
而不是选择所有记录...
scope :occurs_today,-> { where(id: all.select { |s| s.occurs_on?(Date.current) }.pluck(:id) }
...仅在当前范围内的记录上选择...
scope :occurs_today,-> { where(id: select { |s| s.occurs_on?(Date.current) }.pluck(:id) }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。