在我的 Rails 4 应用程序中,一个客户端(客户端表)可以有许多项目(项目表)。我在每个表中都有一个名为 name
的列。我正在尝试编写一个join
,然后select
,它使用项目作为基表,使用客户端作为查找表。 client_id
是项目表中的foreign_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 都会丢失其中一个名称,正如您从上面的响应中看到的那样。我应该如何编写这个查询?
最佳答案
如果 select
中的列不是调用 select
的模型的属性之一,则不会显示这些列。所有这些属性仍然包含在 AR::Relation
内的对象中,并且可以像任何其他公共(public)实例属性一样访问。
您可以通过调用first.client_name
来验证这一点:
Project.joins(:client)
.select('projects.id,projects.name,clients.name as client_name')
.first.client_name
关于sql - ActiveRecord 在 Rails 中加入查询并选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22312901/