在我的rails 4应用程序中,一个客户机(客户机表)可以有许多项目(项目表).每个表中都有一个名为name的列.我正在try 编写一个joinselect,它使用项目作为基表,客户机作为查找表.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')

Then 我得到以下回应:

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中的对象中,并且可以像任何其他公共实例属性一样访问.

您可以通过拨打first.client_name进行验证:

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

Ruby-on-rails相关问答推荐

在Ruby on rails中,重复访问ActiveRecordModel返回相同的对象:预期行为还是错误?

如何在嵌套路由中使用Ruby on rails多态关联

在URL中将下划线更改为连字符Ruby on Rails

Rails引擎importmap Uncaught ReferenceError:未定义tinymce

Sidekiq with Rails - 控制台与 rake 任务中的不同 Sidekiq 实例

一对多关联 counter_cache 在 Rails 中无法正确重新加载

Ruby:如何通过谓词将一个集合拆分为 ruby​​ 中的两个集合?

如何验证 Rails 中的多态字段关联?

Rails 3 应用程序的 MySQL 集群 (NDB) 与 MySQL 复制 (InnoDB):优点/缺点?

NameError:未定义的局部变量或方法记录器

如何从 Ruby on Rails 应用程序返回正确的 HTTP 错误代码

Rails 上的 build 和 new 有什么区别?

如何更改 Heroku 应用程序的 DATABASE_URL

如何从 ActiveRecord 中的每个组中获取最新记录?

是否可以在 Rails 集成测试或规范中指定用户代理?

Rails 5:无法从参数中检索哈希值

在具有唯一约束的关联中使用 Rails 中的 factory_girl.得到重复的错误

Rspec:如何在控制器规范中分配实例变量

如果多态关联的类型列不指向 STI 的基本模型,为什么多态关联对 STI 不起作用?

设置EDITOR或BUNDLER_EDITOR环境变量