我有一组 ActiveRecord 模型,我正在预加载这些模型以避免 N+1 问题。为了帮助这个过程,我希望能够在我有(概念上)如下所示的 block 的地方进行一些手动测试:
# Prepare some data
data = Foo.includes(:bar, {baz: :quux}).find(27)
ActiveRecord.raise_error_if_any_queries_occur
perform_some_work_with_data(data)
ActiveRecord.back_to_normal
这似乎应该是一种方法,但我没有任何运气。有没有其他人这样做过?
最佳答案
您可以断开 ActiveRecord 与数据库的连接,并在完成后重新连接它:
data = Foo.includes(:bar, {baz: :quux}).find(27)
Foo.connection.disconnect!
perform_some_work_with_data(data)
Foo.connection.reconnect!
如果在 ActiveRecord 断开连接时尝试对数据库运行查询,这将引发错误。
关于ruby-on-rails - 有什么好的方法可以暂时阻止 ActiveRecord 执行查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26346777/