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