回答

收藏

ActiveRecord联接查询并在Rails中选择

技术问答 技术问答 140 人阅读 | 0 人回复 | 2023-09-11

在我的Rails' {8 l4 a* q! Y( W! r; H) f- S
4应用程序中的客户端(clients表)可以有多个项目(projects表)。我name每个表中都有一列。我试着写一个join,然后select使用项目作为基础表,将客户端用作查找表。client_id是foreign_key项目表:+ K+ a( e3 m% n7 b, e  z# ^
我写了我的查询,如下所示:' z" R. `) W' I
Project.joins(:client).select('projects.id,projects.name,clients.name')我得到以下回应:, f" y& g$ g9 l! u
Project Load (0.6ms)  SELECT projects.id,projects.name,clients.name FROM "projects" INNER JOIN "clients" ON "clients"."id" = "projects"."client_id"=> #]>假如我试着这样给它起别名:
! I2 ^- B4 f9 p* T$ T; fProject.joins(:client).select('projects.id,projects.name,clients.name as client_name')然后我得到以下反应:
$ r& g& Q% @" V. Z* I' o" _  d. L3 ?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其中一个名字会被释放,正如你从上面的反应中看到的。我应该如何编写这个查询?
" x% B, w2 N6 K9 M* X3 }                                                               
9 V2 A# B) |$ L$ {5 W) n    解决方案:                                                                - S; c2 G& o4 P; _' m
                                                                若其中列select不是select其模型的属性之一不会显示这些列。所有这些属性仍然包含在对象中AR::Relation,并且可以像任何其他公共实例属性一样访问。
8 P' [5 }% f8 ?5 X( Q: z& ]" h您可以通过以下方式进行验证first.client_name:
1 R( T! J1 M' I) c; CProject.joins(:client)       .select('projects.id,projects.name,clients.name as client_name         .first.client_name
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则