【问题标题】:How to get columns of belongs_to table?如何获取belongs_to 表的列?
【发布时间】:2016-12-28 13:45:20
【问题描述】:
学院.rb
has_many :tenant_colleges
tenant_college.rb
belongs_to :college
我想获取大学的属性名称以及所有的tenant_college 属性
我愿意
TenantCollege.select("tenant_colleges.*, colleges.name").joins(:college)
但它没有给出大学名称
【问题讨论】:
标签:
ruby-on-rails
ruby
join
activerecord
【解决方案1】:
我很好奇你为什么不使用原始 SQL 来做这样的事情,但是下面的代码应该可以工作:
TenantCollege.joins(:college).pluck("tenant_colleges.*", "colleges.name")
【解决方案2】:
试试eager loading associations,像这样
tenant_colleges = TenantCollege.includes(:colleges)
tenant_colleges.each do |tc|
puts tc.college.name
end
编辑
就像@lcguida 建议最好使用两个单独的查询。如果您想在单个查询中得到它,请像往常一样使用 .select 方法
TenantCollege.joins(:colleges).select("tenant_colleges.*, colleges.name")
或
TenantCollege.joins("LEFT JOIN colleges ON tenant_colleges.id = colleges.tenant_id")
.select('tenant_colleges.*', 'colleges.name')
【解决方案3】:
- 我想获取大学的属性名称以及所有的tenant_college
属性
当我浏览belongs-to-association-reference 和has-many-association-reference 时,没有可用的内置方法。但只需一点 hack 就很容易了。
class College < ActiveRecord::Base
def get_college_with_tenant_colleges
_ary = {}
_ary[:user] = self
_ary[:tenant_colleges] = self.tenant_colleges
_ary
end
end
但是要确保这个方法的return type是Hash而不是ActiveRecord。所以为了得到ActiveRecord的所有方法,你需要iterate。
希望对您有所帮助!
【解决方案4】:
您可以通过为 sql 列设置特定名称来实现此目的:
results = TenantCollege.select("tenant_colleges.*, colleges.name AS college_name").joins(:college)
results[0].college_name