`

关于includes后遇到的N+1问题

    博客分类:
  • RUBY
 
阅读更多
之前有使用,eager_load  preload  来减少N+1问题,

后来发现includes更好用,可以嵌套关联。像这样子:Inquiry.includes(:inquiry_manager,:contact,inquiry_items: :chemical)

今天关联一个表的时候发现死活还是遇到N+1问题,后来才发现,自己在关联类中定义了一个实例方法重写了sql。

def package_info
     inquiry_items.pluck(:name,:package,:unit).join("").join(";")
end

这里的 inquiry_items.pluck 会重新再查找inquiry和inquiry_items的关系

修改方法,就是用循环来写:

def package_info
    inquiry_items.each do | item|
       #这样就不会再关联了。
    end
end


0
5
分享到:
评论

相关推荐

    Delphi++【新的Delphi工具来了】

    Delphi++ is a Rapid Application Development tool and currently the only development environment that includes a foundation library to create Live Applications that can be distributed and executed on ...

    Node.js-Node.js`buffer.includes()`ponyfill

    总结来说,`buffer.includes()` ponyfill是为了解决老版本Node.js中`buffer.includes()`缺失的问题,它提供了一个安全、非侵入性的解决方案,使开发者能够在不支持此功能的环境中也能享受到新特性的便利。...

    C语言编写1!+2!+3!+.....+n!.doc

    1. Includes语句: 在C语言中,#include语句用于导入头文件,头文件中包含了函数和变量的声明。例如,#include 将引入标准输入输出头文件stdio.h,该头文件中声明了输入输出函数,如printf和scanf。 2. main函数:...

    GDI+开发包 GDI+ SDK

    1. **头文件**:在"Includes"目录下,你会找到一系列以`.h`结尾的文件,这些是C++的头文件,包含了GDI+的类、函数和常量定义。例如`Gdiplus.h`是主要的入口文件,包含了GDI+的基本类和接口。其他如`GdiplusEnums.h`...

    js代码-去重:filter + includes

    因为`includes`在数组中查找元素时需要线性搜索,时间复杂度为O(n)。对于大型数组,可以考虑使用更高效的算法,如`Set`数据结构或者双重循环(时间复杂度为O(n^2),但适用于不支持ES6 Set的情况)。 ### 使用`Set`...

    js代码-去重:reduce + includes

    在JavaScript编程中,数据去重是一项常见的操作,特别是在处理数组时。`reduce` 和 `includes` 是两种在JavaScript中实现数组去重的方法。...如果你遇到任何问题,或者需要进一步的解释,请随时提问。

    tolua++ 1.0.92

    tolua++-1.0.92 源码 ... tolua++ includes new features oriented to c++ such as: Support for std::string as a basic type (this can be turned off by a command line option). Support for class templates

    Programming Visual J++6.0

    Microsoft Visual J++ 6 includes an amazing set of new and powerful features. While retaining support for Web development, Visual J++ 6 turns Java into a first-class language for Microsoft Windows ...

    ReSharperC++官方视频.7z

    ReSharperC++官方视频合集,2020年5月17日下载,Analyzing_includes_with_ReSharperC++.mp4 A_Tour_of_Modern_C++.mp4 C++_Unit_Testing_with_Google_Test_Tutorial.mp4 Code)_Analysis_in_ReSharperC++.mp4 Coding_...

    oscache+ssi+velocity

    其次,`SSI`全称为Server Side Includes,是一种简单的服务器端包含技术。在HTML文件中,通过特定的指令,服务器可以在发送页面到客户端之前动态地插入其他文件或者执行服务器端的命令。例如,可以使用SSI插入日期...

    php+mysql通讯录

    3. 错误处理和日志:良好的错误处理是关键,通过try-catch语句捕获异常,并记录错误日志,有助于调试和问题排查。 二、MySQL数据库设计 1. 数据库结构:通讯录系统可能包含一个或多个表,如`contacts`表,用于存储...

    EasyRoads3D+Pro+v3+v3.0.2+and+v3.1beta2

    亲测可用,仅供学习,不得商用。 Road infrastructures and ...EasyRoads3D v3 includes various tools to create other infrastructures such as railroads and rivers with the riverbed carved in the terrain.

    vc_GDI+显示PNG图片

    解压后,将Includes和Lib文件夹中的内容分别复制到VC6.0的相应目录下。 2. **添加必要的头文件** 在项目的预编译头文件`StdAfx.h`中添加必要的头文件和宏定义: ```cpp #include <comdef.h> // 初始化COM接口 ...

    SSI+Mina2(Struts2+Spring4+Mybatis3+Mina2)集成发布就可运行

    1. **SSI(Server Side Includes)**:SSI是一种服务器端脚本语言,主要用于在HTML页面中包含其他文件或者执行简单的服务器端逻辑,如时间戳、变量等。在这个项目中,SSI可能被用于动态地注入页面元素或数据。 2. *...

    leetcode刷题之动态规划

    在上面的实现中,我们使用了一个大小为n+1的数组来存储dp数组,这可能会导致空间浪费。我们可以使用空间优化的方法来减少空间的使用。 我们可以使用两个变量a和b来存储dp[i-1]和dp[i-2]的值,然后迭代计算dp[i],...

    SQLite Expert Pro 4.2 x86

    It includes a visual query builder, an SQL editor with syntax highlighting and code completion, visual table and view designers and powerful import and export capabilities. Supported platforms: ...

    CompTIA Network+ Practice Tests Exam N10-007

    Edition 版本: 1 出版日期: 2018-05-08 pages 页数: 687 A smarter, faster review for the CompTIA Network+ exam N10-007 Expertly authored questions provide comprehensive, concise review of 100% of all ...

    ext+ssi框架集成系统

    "EXT+SSI框架集成系统"是一个专为Web开发设计的高效解决方案,结合了EXT.js库的强大功能和Server-Side Includes(SSI)的技术优势。EXT.js是一个用于构建富客户端JavaScript应用程序的开源库,提供了丰富的组件库和...

Global site tag (gtag.js) - Google Analytics