小编典典

ActiveRecord联接查询并在Rails中选择

sql

在我的Rails
4应用程序中,一个客户端(clients表)可以有多个项目(projects表)。我name在每个表中都有一个列。我试图写一个join,然后select使用项目作为基础表,将客户端用作查找表。client_idforeign_key项目表中的:

我写我的查询,如下所示:

Project.joins(:client).select('projects.id,projects.name,clients.name')

我得到以下回应:

Project Load (0.6ms)  SELECT projects.id,projects.name,clients.name FROM "projects" INNER JOIN "clients" ON "clients"."id" = "projects"."client_id"
=> #<ActiveRecord::Relation [#<Project id: 1, name: "Fantastico Client">]>

如果我尝试这样给它起别名:

Project.joins(:client).select('projects.id,projects.name,clients.name as client_name')

然后我得到以下响应:

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::Relation [#<Project id: 1, name: "The Dream Project">]>

无论哪种情况,ActiveRecord都会松开其中一个名称,如您从上述响应中看到的那样。我应该如何编写此查询?


阅读 193

收藏
2021-04-15

共1个答案

小编典典

如果其中的列select不是select调用其的模型的属性之一,则不会显示这些列。所有这些属性仍然包含在其中的对象中AR::Relation,并且可以像其他任何公共实例属性一样进行访问。

您可以通过以下方式进行验证first.client_name

Project.joins(:client)
       .select('projects.id,projects.name,clients.name as client_name')
       .first.client_name
2021-04-15