如何获取belongs_to表的列?

时间:2016-08-22 05:58:43

标签: ruby-on-rails ruby join activerecord

college.rb

has_many :tenant_colleges

tenant_college.rb

belongs_to :college

我想获得大学的属性名称以及所有tenant_college属性

我做

TenantCollege.select("tenant_colleges.*, colleges.name").joins(:college)

但它没有提供大学名称

4 个答案:

答案 0 :(得分:3)

尝试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')

答案 1 :(得分:1)

  
      
  • 我想获得大学的属性名称以及所有tenant_college   属性
  •   

当我浏览belongs-to-association-referencehas-many-association-reference时,没有可用的构建方法。但它很容易与小黑客。

class College < ActiveRecord::Base
    def get_college_with_tenant_colleges
      _ary = {}
      _ary[:user] = self
      _ary[:tenant_colleges] =  self.tenant_colleges
      _ary
    end
  end

但要确保此方法的r eturn type 哈希而不是ActiveRecord。因此,为了获得ActiveRecord的所有方法,您需要iterate。 希望这能帮到你!

答案 2 :(得分:0)

我很好奇你为什么不使用原始SQL这样的东西,但下面的代码应该有用:

TenantCollege.joins(:college).pluck("tenant_colleges.*", "colleges.name")

答案 3 :(得分:-1)

您可以通过为sql列设置特定名称来实现此目的:

ViewControllers