![]() |
1
181
看来
|
![]() |
2
105
|
![]() |
3
77
例如,如果您有一个满是注释的表,并且使用a:joins=>用户为了排序等目的而拉入所有用户信息,这将很好地工作,并且花费的时间少于:include,但如果您希望显示注释以及用户名、电子邮件等。要使用:joins获取信息,它必须为其获取的每个用户进行单独的SQL查询,而如果您使用:包含此信息即可使用。 很好的例子: |
![]() |
4
60
我最近读了更多关于两者区别的文章
考虑一下这种情况:
加入::joins执行 在两张桌子之间。因此
将获得 user_id(注释表)等于user.id(用户表)的所有记录。
您将得到一个空数组,如图所示。 此外,联接不会在内存中加载联接表。因此,如果你这样做
如你所见,
:包括执行 在两张桌子之间。因此
将导致 包含注释表中所有记录的联接表。 因此,如果你这样做
它将获取comments.user_id为nil的记录,如图所示。 此外,include在内存中加载这两个表。因此,如果你这样做
正如您所注意到的,comment_1.user.age只需从内存加载结果,而无需在后台启动数据库查询。 |
![]() |
5
55
当你加入评论时,你要求的是有评论的帖子——默认情况下是内部连接。 当你加入评论时,你要求的是所有帖子——一个外部连接。 |
![]() |
6
12
tl;博士
-用于有条件地选择记录。 包括 -对结果集的每个成员使用关联时。
联接用于过滤来自数据库的结果集。您可以使用它在表上执行设置操作。可以将其视为执行集合论的where子句。
与
但若有多条评论,你们会得到重复的帖子和连接。但每个帖子都会有评论。您可以使用以下方法更正此问题:
寓意是,使用
|
![]() |
7
4
.joins用作数据库联接,它联接两个或多个表,并从后端(数据库)获取所选数据。
|
![]() |
8
0
“joins”仅用于连接表,当您在连接上调用关联时,它将再次触发查询(这意味着将触发许多查询)
但是 @记录=用户。包括(:组织)。其中(“organizations.User\u id=1”)
@记录.地图{| u | u.organization.name} |
![]() |
Mr. Tao · 自引用Rails HABTM关联只能单向工作 7 年前 |
![]() |
learner2017 · 动态创建查询-Rails 5 7 年前 |
![]() |
Chloe · 如何从has\u many关系的作用域返回单个值? 7 年前 |