Ruby on rails 我如何知道Rails已加载/缓存Activerecord类属性?

Ruby on rails 我如何知道Rails已加载/缓存Activerecord类属性?,ruby-on-rails,ruby,caching,activerecord,Ruby On Rails,Ruby,Caching,Activerecord,假设我有一个ActiveRecord类“User” 我意识到第一次通过User.new使用它时,Rails会调用数据库,从users表中获取用户的实际属性。随后,它被缓存,不需要数据库调用 这很好。。在一个线程中简单明了 假设在一个进程中运行多个线程。调用User.new的第一个线程(或涉及用户的任何内容,例如查找用户)将在数据库中查找属性。后续的将缓存它们 是否有办法检查ActiveRecord属性是否缓存? 当我调用User.new时,当我不打算使用数据库连接时,我不想总是通过ActiveR

假设我有一个ActiveRecord类“User”

我意识到第一次通过User.new使用它时,Rails会调用数据库,从users表中获取用户的实际属性。随后,它被缓存,不需要数据库调用

这很好。。在一个线程中简单明了

假设在一个进程中运行多个线程。调用User.new的第一个线程(或涉及用户的任何内容,例如查找用户)将在数据库中查找属性。后续的将缓存它们

是否有办法检查ActiveRecord属性是否缓存?

当我调用User.new时,当我不打算使用数据库连接时,我不想总是通过ActiveRecord::Base.connection\u pool.with\u connection签出数据库连接-是的,甚至不保存它

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.

我不会完全解释我的全部推理,但这样做会分散人们的注意力,因为一句话:这很复杂。如果有兴趣,这里有一篇文章,尽管这与我的问题类似:如果可能的话,我基本上不想签出数据库连接,但仍然想调用User.new来操作它,但不保存它。

是和否。可以在下找到实际的架构缓存,但是调用
连接的行为会导致它被打开。如果
ActiveRecord::Base.connected?
如果为false,则可以假定没有架构缓存,如果为true,则必须检查
schema\u缓存
实例的
@列
ivar

这是有问题的,因为活动记录模式假定对象连接到数据源。如果您需要独立于DB的域对象,我建议您使用+
ActiveModel::Validation
等将它们编写为PORO