Предположим, у меня есть класс ActiveRecord «Пользователь».Как узнать, что Rails загружает/кэширует атрибуты класса Activerecord?
Я понимаю, что в первый раз, когда я использую его через User.new, Rails делает вызов в базу данных, чтобы получить фактические атрибуты пользователя из таблицы users. Последующие времена кэшируются и не требуют вызова базы данных.
Это нормально .. и прямо в одной нити.
Предположим, что у меня несколько потоков, работающих в одном процессе. Первый поток, который вызывает User.new (или что-либо, что включает пользователя, например, поиск), будет искать атрибуты в базе данных. Последующие из них будут кэшироваться.
Есть ли способ проверить, кэшируются ли атрибуты ActiveRecord или нет?
Я не хочу, чтобы всегда проверять соединение с базой данных через ActiveRecord :: Base.connection_pool.with_connection, когда я вызываю User.new, когда я не планирую использовать соединение с базой данных - Да даже не сохраняя его.
u = nil
ActiveRecord::Base.connection_pool.with_connection do # I don't want to checkout a conn if User attributes are cached.
u = User.new
end
#manipulation of u. but u.save NEVER ever gets called.
Я не буду полностью объяснить все мои рассуждения, но делать это будет отвлекать людей от ответа, потому что в слове: это сложно. Вот интересная статья, которая похожа на мою проблему: https://bibwild.wordpress.com/2014/07/17/activerecord-concurrency-in-rails4-avoid-leaked-connections/ Я вообще НЕ хочу проверить соединение с базой данных, если это возможно, но все же хочу вызвать User.new, чтобы манипулировать им, но НЕ сохранять его.