ruby-on-rails - 有什么好的方法可以暂时阻止 ActiveRecord 执行查询吗?

标签 ruby-on-rails ruby activerecord

我有一组 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/

相关文章:

ruby-on-rails - PayPal IPN 未连接取消定期计费

ruby-on-rails - 如何使用 Carrierwave 以编程方式生成 PDF 并将其保存在 S3 上?

jquery - Rails session 正在重置

ruby - 通过 Nokogiri 获取可见的文本词

ruby-on-rails - 在 Rails 控制台中定义一个类(实例)方法

ruby-on-rails - Rails bool 值错误?

mysql插入查询不起作用

ruby-on-rails - rails 4.1 : Can't cast Hash to string

ruby-on-rails - 在 Rails 中查找自引用关系中的后代

jquery - 通过 Ajax 使用 Javascript 设置 Rails/Ruby 变量