Size: a a a

2020 September 28

DM

Dmitriy Tensei Malys... in RubyRush
почитай про ActiveRecordRelation просто в доке
источник

А

Александр in RubyRush
Александр
и если я добавляю новый скоуп при этом оно работает не на результате а на релейшене. Прикольно не знал
что у меня тогда получается:
def some_data
 Model.where(x: :y)
end
будет в какой-то мере работать как
def some_data
 @inst_var ||= Model.where(x: :y).to_a
end

Те есть абсолютно лишено смысла:
def some_data
 @inst_var ||= Model.where(x: :y)
end
источник

А

Александр in RubyRush
Dmitriy Tensei Malyshev
почитай про ActiveRecordRelation просто в доке
Да сча разбираюсь, спасибо. Мне просто срочно надо на комент ответить, поэтому решил к знающим людям обратиться :)
источник

DM

Dmitriy Tensei Malys... in RubyRush
Александр
что у меня тогда получается:
def some_data
 Model.where(x: :y)
end
будет в какой-то мере работать как
def some_data
 @inst_var ||= Model.where(x: :y).to_a
end

Те есть абсолютно лишено смысла:
def some_data
 @inst_var ||= Model.where(x: :y)
end
это проще погуглить мемоизацию в руби
источник

D

Dmitriy Y. in RubyRush
Александр
что у меня тогда получается:
def some_data
 Model.where(x: :y)
end
будет в какой-то мере работать как
def some_data
 @inst_var ||= Model.where(x: :y).to_a
end

Те есть абсолютно лишено смысла:
def some_data
 @inst_var ||= Model.where(x: :y)
end
в 1 случае  #some_data будет каждый раз выполнять запрос, пока вы результату не присвоите переменную => последний вариант рабочий, если @inst_var  будет пустой, он сделает запрос
источник

DM

Dmitriy Tensei Malys... in RubyRush
без ||= будет каждый раз запрос при вызове метода
источник

А

Александр in RubyRush
такс, понятненько, Спасибо большое
источник

D

Dmitriy Y. in RubyRush
Александр
такс, понятненько, Спасибо большое
источник

А

Александр in RubyRush
У меня почему-то с давних времен было заблуждение в том, что relation это специальный объект, который не возвращает ссылку на коллекцию данных. Может со старых версий рубей что-то такое в памяти засело :)

P.S.
Т.е. я тут запутанно, наверное понаписал. Но, резюмируя, для меня удивительным оказалось, что:
User.all.each { |user| p user.id } # будет каждый раз слать запрос к базе. Того же я ожидал и от
users = User.all && users.each { |user| p user.id } # Cчитал, что каждый вызов users.each тоже будет каждый раз дергать базу
источник

А

Александр in RubyRush
C  ||= все понятно. Вот с  relation буду тщательно перечитывать все.
источник

WT

William Tombleson in RubyRush
Александр
C  ||= все понятно. Вот с  relation буду тщательно перечитывать все.
Кто-нибудь использовал в проде &&=?
источник

E

Eugene in RubyRush
Александр
У меня почему-то с давних времен было заблуждение в том, что relation это специальный объект, который не возвращает ссылку на коллекцию данных. Может со старых версий рубей что-то такое в памяти засело :)

P.S.
Т.е. я тут запутанно, наверное понаписал. Но, резюмируя, для меня удивительным оказалось, что:
User.all.each { |user| p user.id } # будет каждый раз слать запрос к базе. Того же я ожидал и от
users = User.all && users.each { |user| p user.id } # Cчитал, что каждый вызов users.each тоже будет каждый раз дергать базу
чего-то судя по примерам кода рано говорить о том, что в вопросе разобрались
источник

E

Eugene in RubyRush
William Tombleson
Кто-нибудь использовал в проде &&=?
источник

А

Александр in RubyRush
Eugene
чего-то судя по примерам кода рано говорить о том, что в вопросе разобрались
что в примерах не то?
источник

V

Valery in RubyRush
Александр
что в примерах не то?
Даже если нет ни одного user-а, то User.all вернёт [], что в логическом смысле всегда ИСТИНА.

Т.е. User.all можно вообще убрать из условия.
источник

А

Александр in RubyRush
Ничего не понял...  это же не условие
источник

V

Valery in RubyRush
Александр
Ничего не понял...  это же не условие
Вот у вам выше смотрите:
users = User.all && users.each { |user| p user.id }
источник

А

Александр in RubyRush
это я не совсем корректно привел последовательность :)
users = User.all
users.each { |user| p user.id }
users.each { |user| p user.id }
users.each { |user| p user.id }
users.each { |user| p user.id }

То что обращение к БД происходит исключительно в первой строке было для меня откровением

Я думал, что каждый раз метод, вызванный на relation (даже если он записан в переменную) будет делать вызов БД.

Так же как и
User.all.each { |user| p user.id }
User.all.each { |user| p user.id }
источник

V

Valery in RubyRush
Александр
это я не совсем корректно привел последовательность :)
users = User.all
users.each { |user| p user.id }
users.each { |user| p user.id }
users.each { |user| p user.id }
users.each { |user| p user.id }

То что обращение к БД происходит исключительно в первой строке было для меня откровением

Я думал, что каждый раз метод, вызванный на relation (даже если он записан в переменную) будет делать вызов БД.

Так же как и
User.all.each { |user| p user.id }
User.all.each { |user| p user.id }
Я имел в виду вот это ваше сообщение
https://t.me/rubyrush/56835
источник

А

Александр in RubyRush
Valery
Даже если нет ни одного user-а, то User.all вернёт [], что в логическом смысле всегда ИСТИНА.

Т.е. User.all можно вообще убрать из условия.
Вот тут интересная вещь для меня User.all, как я представлял, вернет не [], а relation
источник