ActiveRecord联接查询并在Rails中选择
技术问答
505 人阅读
|
0 人回复
|
2023-09-11
|
在我的Rails
5 `; _3 e! k5 `* Y1 R4应用程序中的客户端(clients表)可以有多个项目(projects表)。我name每个表中都有一列。我试着写一个join,然后select使用项目作为基础表,将客户端用作查找表。client_id是foreign_key项目表:' n" N) Z: D- D" r' U: |5 Y9 k
我写了我的查询,如下所示:% @, u* _6 h% L2 [" X( C2 c
Project.joins(:client).select('projects.id,projects.name,clients.name')我得到以下回应:
- |5 Q% Z5 L6 E3 iProject Load (0.6ms) SELECT projects.id,projects.name,clients.name FROM "projects" INNER JOIN "clients" ON "clients"."id" = "projects"."client_id"=> #]>假如我试着这样给它起别名:
! P5 G8 ?6 U- k! A3 D2 YProject.joins(:client).select('projects.id,projects.name,clients.name as client_name')然后我得到以下反应:# R9 }/ J( {; x) u. Y! C0 s
Project Load (0.8ms) SELECT projects.id,projects.name,clients.name as client_name FROM "projects" INNER JOIN "clients" ON "clients"."id" = "projects"."client_id"=> #]>无论如何,ActiveRecord其中一个名字会被释放,正如你从上面的反应中看到的。我应该如何编写这个查询?1 u- S) O) d$ H( Q% g
- Y# R# [% b. w' H: B 解决方案: - i, H5 i2 z* k7 A
若其中列select不是select其模型的属性之一不会显示这些列。所有这些属性仍然包含在对象中AR::Relation,并且可以像任何其他公共实例属性一样访问。& M5 Y6 o- y0 N [" p' T) f
您可以通过以下方式进行验证first.client_name:0 v4 U' k2 @! ^1 @2 c9 I
Project.joins(:client) .select('projects.id,projects.name,clients.name as client_name .first.client_name |
|
|
|
|
|