如何在不执行其他查询的情况下过滤AR查询的结果?
例如:
u = User.where(name: "bob", age: [10, 20])
# 1st select query to db
u.class # ActiveRecord::Relation
tens = u.where(age: 10)
# 2nd select query to db
我不希望第二个查询调用db,而是根据u(第一个查询)中检索到的结果进行过滤。
发布于 2013-10-24 03:22:49
ActiveRecord:Relation
仅在其元素被访问时查询db。因此,除非您编写u.first
或tens.first
之类的代码,否则您拥有的序列根本不会调用db。
这在Rails控制台中有一点不同,因为每个语句的结果都被打印到控制台,所以它每次都会执行查询。您可以通过在每条语句后面附加; 1
来跳过打印。
除此之外,如果您仍然希望过滤第一个查询的结果:
u = User.where(name: "bob", age: [10, 20]) # no query at this point
u.class # ActiveRecord::Relation
u.first # query to db
u.class # Array
tens = u.select{|x| x.age == 10} # no query to db
https://stackoverflow.com/questions/19549941
复制相似问题