【问题标题】:Getting details of other columns from active record joins从活动记录连接中获取其他列的详细信息
【发布时间】:2021-06-17 08:08:50
【问题描述】:

我有以下加入,我得到Review 表所有列,但我需要添加其他列,但它没有显示其他列。

Review.joins(division: [{company: :region}, :departments, :employees]).select('reviews.id, companies.name as company, region.name, divisions.name as division).limit(10)

但我只收到评论

[#<Review:0x00007ff5006bb910 id: 1>,
...

如何获取 Division.id、company.name 和 region.name

【问题讨论】:

  • 它应该可以像 review.division.id 和 review.company 一样访问。

标签: ruby-on-rails activerecord


【解决方案1】:

您所看到的(仅 Review 对象)是您应该看到的,Rails 执行 Review、Devision、Company 等之间的连接,并带回由该连接产生的 Review 记录。但是,选定的别名列应可用作 Review 记录中的方法:

reviews = Review.joins(...)
reviews.first.company
reviews.first.division

请注意,inspect 方法不显示非列属性,因此您的控制台可能会隐藏别名列(公司、部门),但它们确实存在。

由于您似乎不仅要过滤,而且还需要关联数据,因此最好将其与 eager_loading 交换,因为如果您尝试访问这样的关联,您将触发 n+1 queries。

Review.includes(division: [{company: :region}, :departments, :employees]).select('reviews.id, companies.name as company, region.name, divisions.name as division).limit(10)

【讨论】:

  • 像 region_id 这样的一对一关系为空而不显示任何数据?有没有办法修复如果为空而不是只显示而不是将所有数据显示为空。
猜你喜欢
  • 2016-09-19
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 2016-10-20
  • 1970-01-01
相关资源
最近更新 更多