Подтвердить что ты не робот

Фильтрация отношения activerecord без дополнительного sql-запроса?

Как фильтровать результаты запроса 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 (1-й запрос).

4b9b3361

Ответ 1

ActiveRecord:Relation запрашивает только db при обращении к своим элементам. Таким образом, ваша последовательность не будет вообще вызывать db, если вы не напишете что-то вроде u.first или tens.first.

Это немного отличается в консоли 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