sql - ActiveRecord 在 Rails 中加入查询并选择

标签 sql ruby-on-rails activerecord

在我的 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/

相关文章:

sql - 使用 Postgres 时为 "Operator does not exist: integer =?"

ruby-on-rails - 如何设置设计邮件发件人名称?

mysql - 事件记录。包括来自连接表的数据

ruby-on-rails - Rails 项目 : NoMethodError: undefined method `identifier' for String

sql - 我如何先由 parent 订购然后由 child 订购?

sql - 定期删除 SQL 中的行

MySQL:用 FROM 子句中的相关子查询重写 MSSQL?

ruby-on-rails - 单选按钮助手 - 默认值

ruby-on-rails - 从 Ruby on Rails 多次上传到 Amazon S3 - 使用什么后台处理系统?

ruby-on-rails-3 - Ruby on Rails - 列名称与关系名称相同