有一种暂时阻止ActiveRecord执行查询的好方法吗?

ast*_*asr 1 ruby activerecord ruby-on-rails

我有一组ActiveRecord模型,我预先加载它们以避免N + 1问题.为了帮助完成这个过程,我希望能够进行一些手动测试,其中(概念上)块看起来如下所示:

# 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
Run Code Online (Sandbox Code Playgroud)

这似乎应该有办法,但我没有运气.还有其他人这样做过吗?

inf*_*sed 5

您可以断开ActiveRecord与数据库的连接,并在完成后重新连接它:

data = Foo.includes(:bar, {baz: :quux}).find(27)

Foo.connection.disconnect!
perform_some_work_with_data(data)
Foo.connection.reconnect!
Run Code Online (Sandbox Code Playgroud)

如果在ActiveRecord断开连接时有任何尝试对数据库运行查询,则会引发错误.